Domanda:
Avrei bisogno di una macro che mi permetta di copiare i soli file di testo di una specifica directory che contengono una specifica stringa alfanumerica dalla directory sorgente ad un’altra da specificare.
Risposta:
E’ possibile risolvere il problema con una solo macro che verifica presenza della stringa nel nome del file e lo copia direttemente (v2)
o con due macro, una per la verifica ed una per la copia, per un maggiore controllo dell’operazione (v1)
Vediamo il secondo caso, le cui macro sono contenute nel modulo ‘v1’.
Prima di lanciare la macro dovrete modificare il seguente codice inserendo quello della cartella sul vostro computer
PercorsoDefault = "C:\Users\rvincenti\Desktop\Copia File con condizione\SORGENTE\"
Bottone “v1 – Verifica condizione”
Con il codice
Dim fDialog As Office.FileDialog Set fDialog = Application.FileDialog(msoFileDialogFolderPicker) Dim selezione As Variant
faccio aprire il File Dialog per selezionare la cartella che contiene i file da analizzare.
Dopo aver selezionato la cartella e cliccato su “OK”
attribuisco alla variabile ‘Percorso’ il percorso della cartella selezionata
Percorso = selezione
Utilizzo questa variabile nell’istruzione
Set f = fs.GetFolder(Percorso)
contenuta nel seguente blocco di codice
r = 3 Dim fs, f, f1, s, sf Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(Percorso) Set sf = f.Files For Each f1 In sf Sheet1.Cells(r, 1) = f1.Path Sheet1.Cells(r, 2) = f1.Name If f1.Name Like "*EL_CONTROLS*" Then Sheet1.Cells(r, 3) = "DA COPIARE" End If r = r + 1 Next
che cicla all’interno di tutti i file contenuti nella cartella ‘Percorso’
e scrive il percorso completo dei file trovati ed il loro nome
Sheet1.Cells(r, 1) = f1.Path Sheet1.Cells(r, 2) = f1.Name
Nel caso d’esempio ho stabilito di cercare la stringa ‘EL_CONTROLS’
If f1.Name Like "*EL_CONTROLS*"
Ho messo gli asterischi prima e dopo per cercare tutte le parole che contengono la stringa al suo interno. Altre condizioni impostabili:
If f1.Name = “EL_CONTROLS” >>> il nome del file deve essere uguale a “EL_CONTROLS”
If f1.Name Like “EL_CONTROLS*” >>> il nome del file deve iniziare con “EL_CONTROLS”
If f1.Name Like “*EL_CONTROLS” >>> il nome del file deve finire con “EL_CONTROLS”
Tornando al codice, una volta che il nome del file soddisfa la condizione desiderata,
viene scritto “DA COPIARE” nella colonna “C”
A questo punto, siamo in grado di vedere quali file saranno copiati.
Bottone “v1 – Copia File”
Prima di lanciare la macro dovrete modificare il seguente codice inserendo quello della cartella sul vostro computer dove andranno copiati i file
Dim PercorsoDestinazione As String PercorsoDestinazione = "C:\Users\rvincenti\Desktop\Copia File con condizione\DESTINAZIONE\"
Con il seguente codice:
Last_Row = Sheet1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For i = 3 To Last_Row If Sheet1.Cells(i, 3) = "DA COPIARE" Then Call CopiaFile(Sheet1.Cells(i, 1), PercorsoDestinazione & Sheet1.Cells(i, 2)) Sheet1.Cells(i, 4) = "File COPIATO" End If Next i
ciclo su tutte le righe compilate dalla macro precedente e dove nella colonna C è scritto “DA COPIARE”, richiamo la funzione “CopiaFile” che ha 2 argomenti
Origine >>> Sheet1.Cells(i, 1)
Destinazione >>> PercorsoDestinazione & Sheet1.Cells(i, 2))
Se si dovesse decidere di non far copiare uno o più dei file, basta cancellare il testo “DA COPIARE” della corrispondente riga.
Come suggerisce il nome, la funzione copia i file nelal cartella di idestinazione sopra definita.
ATTENZIONE:
il nome del file di destinazione DEVE essere uguale a quello di origine.
A voi il file:
APRI
Riccardo Vincenti
Riccardo Vincenti
Ultimi post di Riccardo Vincenti (vedi tutti)
- 073. Duplicare righe excel modificando il contenuto - 6 Ottobre 2017
- 072. Estrazione numeri casuali - 6 Ottobre 2017
- 071. Estrazione casuale valori da un elenco - 5 Ottobre 2017
- 070. Contare dati univoci senza Pivot - 21 Settembre 2017
- 069. Aggiungere intervalli ad una data: Date Add in Excel - 21 Settembre 2017
Al momento non ho modo di provare i codici che hai scritto, l’unico problema è che la stringa da ricercare non è nel nome del file ma nel contenuto del file di testo stesso.
Spero si possa fare!
Grazie.