047. Copia File con condizione

Download PDF

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

The following two tabs change content below.