Note: The other languages of the website are Google-translated. Back to English

Cum să copiați sau să mutați fișiere dintr-un dosar în altul pe baza unei liste din Excel? 

Dacă aveți o listă de nume de fișiere într-o coloană dintr-o foaie de lucru, iar fișierele se găsesc într-un folder din calculatorul dvs. Dar, acum, trebuie să mutați sau să copiați aceste fișiere ale căror nume sunt listate în foaia de lucru din folderul original în altul, după cum se arată în următoarea captură de ecran. Cum ați putea termina această sarcină cât de repede puteți în Excel?

Copiați sau mutați fișiere dintr-un dosar în altul pe baza unei liste în Excel cu cod VBA


Copiați sau mutați fișiere dintr-un dosar în altul pe baza unei liste în Excel cu cod VBA

Pentru a muta fișierele dintr-un dosar în altul pe baza unei liste de nume de fișiere, următorul cod VBA vă poate face o favoare, vă rugăm să procedați astfel:

1. Țineți apăsat butonul Alt + F11 tastele în Excel și deschide fișierul Microsoft Visual Basic pentru aplicații fereastră.

2. Clic Insera > Moduleși lipiți următorul cod VBA în fereastra modulului.

Cod VBA: Mutați fișierele dintr-un dosar în altul pe baza unei liste din Excel

Sub movefiles()
'Updateby Extendoffice
    Dim xRg As Range, xCell As Range
    Dim xSFileDlg As FileDialog, xDFileDlg As FileDialog
    Dim xSPathStr As Variant, xDPathStr As Variant
    Dim xVal As String
    On Error Resume Next
    Set xRg = Application.InputBox("Please select the file names:", "KuTools For Excel", ActiveWindow.RangeSelection.Address, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    Set xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    xSFileDlg.Title = " Please select the original folder:"
    If xSFileDlg.Show <> -1 Then Exit Sub
    xSPathStr = xSFileDlg.SelectedItems.Item(1) & "\"
    Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    xDFileDlg.Title = " Please select the destination folder:"
    If xDFileDlg.Show <> -1 Then Exit Sub
    xDPathStr = xDFileDlg.SelectedItems.Item(1) & "\"
    For Each xCell In xRg
        xVal = xCell.Value
        If TypeName(xVal) = "String" And xVal <> "" Then
            FileCopy xSPathStr & xVal, xDPathStr & xVal
            Kill xSPathStr & xVal
        End If
    Next
End Sub

3. Și apoi apăsați F5 pentru a rula acest cod și va apărea o casetă de solicitare pentru a vă reaminti să selectați celulele care conțin numele fișierelor, a se vedea captura de ecran:

4. Apoi apasa OK și, în fereastra pop-out, selectați folderul care conține fișierele din care doriți să vă mutați, vedeți captura de ecran:

5. Apoi faceți clic pe OK, continuați să selectați folderul de destinație unde doriți să localizați fișierele într-o altă fereastră ieșită, vedeți captura de ecran:

6. În cele din urmă, faceți clic pe OK pentru a închide fereastra și acum, fișierele au fost mutate într-un alt folder pe care l-ați specificat pe baza numelor de fișiere din lista foilor de lucru, consultați captura de ecran:

notițe: Dacă doriți doar să copiați fișierele într-un alt folder, dar păstrați fișierele originale, vă rugăm să aplicați codul VBA de mai jos:

Cod VBA: copiați fișierele dintr-un folder în altul pe baza unei liste din Excel

Sub copyfiles()
'Updateby Extendoffice
    Dim xRg As Range, xCell As Range
    Dim xSFileDlg As FileDialog, xDFileDlg As FileDialog
    Dim xSPathStr As Variant, xDPathStr As Variant
    Dim xVal As String
    On Error Resume Next
    Set xRg = Application.InputBox("Please select the file names:", "KuTools For Excel", ActiveWindow.RangeSelection.Address, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    Set xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    xSFileDlg.Title = "Please select the original folder:"
    If xSFileDlg.Show <> -1 Then Exit Sub
    xSPathStr = xSFileDlg.SelectedItems.Item(1) & "\"
    Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    xDFileDlg.Title = "Please select the destination folder:"
    If xDFileDlg.Show <> -1 Then Exit Sub
    xDPathStr = xDFileDlg.SelectedItems.Item(1) & "\"
    For Each xCell In xRg
        xVal = xCell.Value
        If TypeName(xVal) = "String" And xVal <> "" Then
            FileCopy xSPathStr & xVal, xDPathStr & xVal
        End If
    Next
End Sub

 


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab

 

Comentarii (73)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Este macro-ul frumos. Foarte util pentru mine. dar am nevoie de ceva macro de actualizare. aceasta folosită pentru a copia fișierele dintr-un singur folder în alt folder. avem nevoie să copiem fișierele din folder și subfolder în alt folder.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, În folderul sursă, doresc să-l setez ca o constantă dintr-o celulă, de exemplu, calea introdusă într-o anumită celulă, cum ar fi A1, ar trebui să fie tratată ca folderul sursă. Cum să facă acest lucru?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Era exatamente isso que eu precisava!!!

Muito Obrigado!!!!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumiri!!!!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Você não tem noção de como me ajudou com esse script... Muito bom!!! Obligat!!!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut baieti,

Cum trebuie să schimb '' If TypeName(xVal) = "String" și xVal <> "" Then '' pentru a muta fișierele pe baza numelui parțial al fișierului.


Multumesc în avans,
Cu stima, P
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ați aflat vreodată CUM să utilizați un NUME PARȚIAL DE FIȘIER? am nevoie si de asta...
Cu alte cuvinte, dacă numele fișierului din lista de foi Excel este: OW4234TR_J19031.txt (aș dori să se uite doar la ultimele 5 caractere „19031” care este o dată Julian și să mute o serie de fișiere... orice cu un Julian Data din 19031 până în 19075..
Acest comentariu a fost redus la minimum de moderatorul de pe site
De asemenea, aș necesita modificarea parțială a numelui fișierului vba. Ai primit vreodată un răspuns?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Pe mine ma intereseaza exact aceeasi solutie! A primit cineva răspunsul? Am o listă P/N într-o coloană și vreau o bucată de cod care să se uite într-un folder părinte care are mai multe subdosare după fișiere cu numele indicat de listă, dar doar parțial, pentru că am nu cunosc extensia de fișier și, în multe cazuri, pentru un singur P/N din listă, am mai multe fișiere diferențiate prin existența unui sufix care nu are întotdeauna același model, cum ar fi xxxx_1, xxxx_2, xxx (1 ), xxxx [1], xxxx- (a ), xxxx_ (b) ...., dar trebuie sa copiez in folderul de destinatie, toate instantele fisierelor care contin in numele lor P/N. Va rog ajutati eu să nu fac această treabă manual pentru 34078 fișiere care astăzi le găsesc în folderul părinte și subfolderele
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,
cum pot face acest cod să copieze fișiere din subfoldere?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Sfaturi despre cum să modificați codul pentru a adăuga un card lat? Am o arhivă de sute de fișiere PDF care sunt numere de 10 cifre și nivel de revizuire (XXXXXXXXX_REVA). Pot exporta foarte ușor o listă de nume de fișiere din sistemul nostru ERP, dar din listă lipsesc revizuirea și extensia de fișier. Există vreo modalitate de a adăuga cărți sălbatice în program pentru a ignora totul, CUĂRĂ numărul de 10 cifre?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nu pot face ca nici una dintre versiuni să funcționeze în Windows 10.


Argggg
Acest comentariu a fost redus la minimum de moderatorul de pe site
en el codigo que copia ¿como pot colora el nume de la lista că nu încuentre?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Funcționează grozav - mulțumesc! Totuși-->>>Poate fi ajustat pentru a utiliza un NUME PARȚIAL DE FIȘIER? Dacă da, poți să arăți cum?
Cu alte cuvinte, dacă numele fișierului din lista de nume de fișiere din foaia Excel este: OW4234TR_J19031.txt (aș dori să se uite doar la ultimele 5 caractere „19031”, care este o dată Julian și să mute o serie de fișiere... ( orice cu o dată Julian de la 19092 până la 19120) în folderul martie.. Sarcina generală finală este să găsiți orice fișiere care au date Julian pentru martie și să le puneți în folderul martie fiscal „06-mar”, aprilie în Dosarul aprilie „07-Apr” și așa mai departe...deci pot avea loc reconcilieri fiscale pe lună.. TIA pentru orice ajutor pe care oricine îl poate oferi pentru a accelera acest proces de vânătoare și cules care necesită timp. =-)
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut, stii sa cauti si in subdosar?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Și-a dat cineva seama cum să copieze fișierele care se află în mai multe subfoldere ale directorului principal și să lipiți într-un alt director de foldere? De asemenea, această metodă de transfer funcționează numai pentru folderele de pe unitatea C? Încerc să copiez fișiere din directorul nostru care include mai multe subfoldere în care sunt stocate mai multe fișiere situate în Microsoft Sharepoint, într-un folder de pe unitatea mea C.

Orice ajutor ar fi foarte apreciat!
Acest comentariu a fost redus la minimum de moderatorul de pe site
multumesc mult !
Acest comentariu a fost redus la minimum de moderatorul de pe site
buenas noches, cineva sabe que trebuie să modifice pentru a-mi muta folderele și nu numai fișierele?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Orice actualizare a modului de căutare în folder și subdosare
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, Nasr,
Pentru a muta fișiere din foldere și subdosare pe baza valorilor celulelor, vă rugăm să aplicați codul VBA de mai jos:
Vă rugăm să încercați, sper că vă poate ajuta!

Subfișiere mutate()
'Actualizare de Extendoffice
Dim xRg As Range, xCell As Range
Dim xSFileDlg ca FileDialog, xDFileDlg ca FileDialog
Dim xSPathStr ca variantă, xDPathStr ca variantă
Dim xVal As String
Dim fso ca obiect, folder1 ca obiect
' La eroare Reluați următoarea
Set xRg = Application.InputBox(„Vă rugăm să selectați numele fișierelor:”, „KuTools pentru Excel”, ActiveWindow.RangeSelection.Address, , , , , 8)
Dacă xRg nu este nimic, ieșiți din sub
Setați xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xSFileDlg.Title = " Vă rugăm să selectați folderul original:"
Dacă xSFileDlg.Show <> -1 Apoi Ieșiți din sub
xSPathStr = xSFileDlg.SelectedItems.Item(1) & „\”
Setați xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = " Vă rugăm să selectați folderul de destinație:"
Dacă xDFileDlg.Show <> -1 Apoi Ieșiți din sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) & „\”
Apelați sMoveFiles(xRg, xSPathStr, xDPathStr)
End Sub

Sub sMoveFiles(xRg ca interval, xSPathStr ca variantă, xDPathStr ca variantă)
Dim xCell As Range
Dim xVal As String
Dim xFolder ca obiect
Dim fso ca obiect
Dim xF ca obiect
Dim xStr As String
Dim xFS ca obiect
Dim xI ca întreg
La data de eroare CV următoare
Dacă Dir(xDPathStr, vbDirectory) = "" Atunci
MkDir (xDPathStr)
Final, dacă
Pentru xI = 1 To xRg.Count
Setați xCell = xRg.Item(xI)
xVal = xCell.Value
Dacă TypeName(xVal) = "Șir" și nu (xVal = ""), atunci
La eroare GoTo E1
Dacă Dir(xSPathStr & xVal, 16) <> Golit, atunci
FileCopy xSPathStr & xVal, xDPathStr & xVal
Omorâți xSPathStr și xVal
Final, dacă
Final, dacă
E1:
Următorul xI
La data de eroare CV următoare
Setați fso = CreateObject ("Scripting.FileSystemObject")
Setați xFS = fso.GetFolder(xSPathStr)
Pentru fiecare xF din xFS.SubFolders
xStr = xDPathStr & "\" & xF.Name ' Înlocuiește(xF.ShortPath, xSPathStr, xDPathStr)
Apelați sMoveFiles(xRg, xF.ShortPath și „\”, xStr și „\”)
Dacă (CreateObject("scripting.FileSystemObject").GetFolder(xStr).Files.Count = 0) _
Și (CreateObject("scripting.FileSystemObject").GetFolder(xStr).SubFolders.Count = 0) Apoi
RmDir xStr
Final, dacă
Pagina Următoare →
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Este perfect, mulțumesc
dar ce zici dacă aș dori doar să copiez fișiere, nu să le mut din subfoldere doar fără a fi nevoie să creez subfoldere în folderul de destinație
ie
folderul sursă X:\\părinte
în interiorul părintelui se află subfolderele test1 (fișier A), test2 (fișier B) și test3 (fișier C)
atunci folderul de destinație este „Y:\\destination” are toate cele 3 fișiere A, B, C fără subfolderele

Mulțumesc foarte mult
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Nasr, ți-ai dat seama cum să faci asta? Mă uit la o nevoie similară în acest moment.

Copierea unei selecții de fișiere din diferite subdosare într-un singur folder
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Mike
Am cam făcut DAR indirect, așa că ceea ce am făcut a fost să modific codul pentru a copia fișierele și nu a le muta cu subfolderul
apoi cu fișierul CMD mutați fișierul din subfolder în folderul principal apoi ștergeți subfolderul gol
asta am facut

Sub Copyfiles()
'Actualizare de Extendoffice
Dim xRg As Range, xCell As Range
Dim xSFileDlg ca FileDialog, xDFileDlg ca FileDialog
Dim xSPathStr ca variantă, xDPathStr ca variantă
Dim xVal As String
Dim fso ca obiect, folder1 ca obiect
' La eroare Reluați următoarea
Set xRg = Application.InputBox(„Vă rugăm să selectați numele fișierelor:”, „KuTools pentru Excel”, ActiveWindow.RangeSelection.Address, , , , , 8)
Dacă xRg nu este nimic, ieșiți din sub
Setați xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xSFileDlg.Title = " Vă rugăm să selectați folderul original:"
Dacă xSFileDlg.Show <> -1 Apoi Ieșiți din sub
xSPathStr = xSFileDlg.SelectedItems.Item(1) & „\”
Setați xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = " Vă rugăm să selectați folderul de destinație:"
Dacă xDFileDlg.Show <> -1 Apoi Ieșiți din sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) & „\”
Apelați sCopyFiles(xRg, xSPathStr, xDPathStr)
End Sub

Sub sCopyFiles (xRg ca interval, xSPathStr ca variantă, xDPathStr ca variantă)
Dim xCell As Range
Dim xVal As String
Dim xFolder ca obiect
Dim fso ca obiect
Dim xF ca obiect
Dim xStr As String
Dim xFS ca obiect
Dim xI ca întreg
La data de eroare CV următoare
Dacă Dir(xDPathStr, vbDirectory) = "" Atunci
MkDir (xDPathStr)
Final, dacă
Pentru xI = 1 To xRg.Count
Setați xCell = xRg.Item(xI)
xVal = xCell.Value
Dacă TypeName(xVal) = "Șir" și nu (xVal = ""), atunci
La eroare GoTo E1
Dacă Dir(xSPathStr & xVal, 16) <> Golit, atunci
FileCopy xSPathStr & xVal, xDPathStr & xVal
Final, dacă
Final, dacă
E1:
Următorul xI
La data de eroare CV următoare
Setați fso = CreateObject ("Scripting.FileSystemObject")
Setați xFS = fso.GetFolder(xSPathStr)
Pentru fiecare xF din xFS.SubFolders
xStr = xDPathStr & "\" & xF.Name ' Înlocuiește(xF.ShortPath, xSPathStr, xDPathStr)
Apelați sCopyFiles(xRg, xF.ShortPath și „\”, xStr și „\”)
Dacă (CreateObject("scripting.FileSystemObject").GetFolder(xStr).Files.Count = 0) _
Și (CreateObject("scripting.FileSystemObject").GetFolder(xStr).SubFolders.Count = 0) Apoi
RmDir xStr
Final, dacă
Pagina Următoare →
End Sub



apoi copiați următoarele linii într-un nou bloc de note, apoi salvați-l ca cmd numiți-l oricum

pentru /r %%a IN (*).*) face (
mutați /y „%%a” „%cd%”
)
pentru /f "delims=" %%d în ('dir /s /b /ad ^| sort /r') faceți rd "%%d"



asigurați-vă că copiați codul așa cum este pe 4 linii
sper ca ajuta
Acest comentariu a fost redus la minimum de moderatorul de pe site
asigurați-vă că puneți fișierul cmd în același folder în care copiați fișierele și subfolderele, apoi faceți dublu clic pe el
Acest comentariu a fost redus la minimum de moderatorul de pe site
Puteți obține același rezultat folosind doar VBA dacă adăugați un „ înainte de & „\” și xF.Name în linia de mai jos.
Acest lucru încă copiază din subfoldere, dar se copiază într-un folder cu un singur nivel.

xStr = xDPathStr & "\" & xF.Name ' Înlocuiește(xF.ShortPath, xSPathStr, xDPathStr)
Devine
xStr = xDPathStr '& "\" & xF.Name ' Replace(xF.ShortPath, xSPathStr, xDPathStr)
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, Skyyang, vreau să copiez sau să mut fișiere (.jpg, .png) în orice format din folder și subdirectoarele acestuia. Scriptul de mai sus copie întregul folder care conține fișierul potrivit
Multumiri si urari de bine,
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, nu sunt un expert în VBA, dar am nevoie de modulul dvs. și am făcut așa cum ați indicat, dar nimic nu a fost copiat din folderul sursă în noul folder. și nu este afișată nicio eroare
Acest comentariu a fost redus la minimum de moderatorul de pe site
Și ce se întâmplă dacă fișierul nu există în folderul de origine?
codul se rupe

Codul va avea o linie pentru a trece la o altă referință dacă nu există
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dacă referința nu există, întreruperea codului
pe ce linie trebuie să fac un salt prin următoarea referință fără oprire
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum ar putea fi adaptat acest lucru pentru a lipi într-o listă de căi de fișiere multiple în loc de o cale la un moment dat?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, Sabin,
Doriți să copiați și să lipiți fișierele care din mai multe foldere originale în loc de un singur folder?
Acest comentariu a fost redus la minimum de moderatorul de pe site
da, te rog
Nu există comentarii postate aici încă
Încărcați mai
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL