037. Copiare File con VBA e rinominarli

Download PDF

Domanda:

Non sono un esperto di excel vba , ma vorrei sapere se è possibile risolvere questo mio problema.
In una cartella di Windows 7 ho un elenco di files (vedi un esempio sotto, di alcuni di essi).
Sono tutti con una parte del nome ripetitiva e una parte variabile /accessoria (estensione file). Le ultime sei cifre +_ del nome del file _out.csv sono quelle che mi interessano aggiungere al nome del file relativo .xlsx


\\SORGENTE
102020_CABINETS_130919 _000000002000009902_out.csv
102020_CABINETS_130919.csv
102020_CABINETS_130919.xlsx

102020_EL_CONTROLS_GR_11 _000000002000009939_out.csv
102020_EL_CONTROLS_GR_11.csv
102020_EL_CONTROLS_GR_11.xlsx

102020_EL_GR_30_31 _000000002000010065_out.csv
102020_EL_GR_30_31.csv
102020_EL_GR_30_31.xlsx

MIO.xlsx

I files come si vede sono sempre a gruppi di tre. I files originali si trovano in una cartella che chiamerò SORGENTE e vorrei con un automatismo copiare solo i files .xlsx ,non i files .csv in una nuova cartella DESTINAZIONE, però rinominando ogni files come segue (esempio)
\\DESTINAZIONE
009902_102020_CABINETS_130919.xlsx
009939_102020_EL_CONTROLS_GR_11.xlsx
010065_102020_EL_GR_30_31.xlsx

MIO.xlsx
Sostanzialmente di ogni terna di files (SORGENTE), quello che mi interessa copiare nella nuova cartella (DESTINAZIONE) è il file di excel (.xlsx). Ma lo devo rinominare con la numerazione esistente nel nome del file relativo xxxxxxx_out.csv.
Ultima precisazione. E’ possibile lanciare questa macro, tramite pulsante, da un file es. MIO.xlsx presente nella cartella SORGENTE e poi copiare anche il file MIO.xlsx stesso da cui viene lanciata la macro, nella cartella DESTINAZIONE insieme ai files .xlsx rinominati?

Risposta:

E’ possibile copiare i file utilizzando i FileSystem Object. Prima di utilizzarli è necessario verificare
che sulla propria versione di Excel sia stata installata la libreria “Microsoft Scripting Runtime”.
Per farlo bisogna aprire l’editor VBA, cliccare su Tools, References e nel caso non fosse presente tra le librerie con il segno di spunta, cercarla e selezionarla.

L’esigenza del nostro lettore è quella di rinominare il file xlsx anteponendo al nome originale un prefisso preso dal nome di un file csv. Con queste istruzioni, ciclo tra i file presenti nella cartella SORGENTE e determino il valore dei prefissi:

        If f1.Name Like "*_CABINETS_*_out.csv" Then

           Prefisso_CABINETS = Left(Right(f1.Name, 14), 6)

        ElseIf f1.Name Like "*_EL_CONTROLS_GR_11*_out.csv" Then

           Prefisso_EL_CONTROLS = Left(Right(f1.Name, 14), 6)

        ElseIf f1.Name Like "*_EL_GR_30_31*_out.csv" Then

           Prefisso_EL_GR = Left(Right(f1.Name, 14), 6)

        End If

Fatto ciò continuo il ciclo e per i file xlsx deternino il nuovo nome comprensivo di prefisso,
ed il persorso completo del file nella cartella SORGENTE ed in quella DESTINAZIONE.

        If f1.Name Like "*_CABINETS_*xlsx" Then

           Sorgente_CABINETS = Sorgente & f1.Name
           Destinazione_CABINETS = Destinazione & Prefisso_CABINETS & "_" & f1.Name

        ElseIf f1.Name Like "*_EL_CONTROLS_GR_11*xlsx" Then

           Sorgente_EL_CONTROLS = Sorgente & f1.Name
           Destinazione_EL_CONTROLS = Destinazione & Prefisso_EL_CONTROLS & "_" & f1.Name

        ElseIf f1.Name Like "*_EL_GR_30_31*xlsx" Then

           Sorgente_EL_GR = Sorgente & f1.Name
           Destinazione_EL_GR = Destinazione & Prefisso_EL_GR & "_" & f1.Name

        End If

Fatto ciò abbiamo tutto quello che serve per lanciare la funzione CopiaFile che prevede due argomenti

Function CopiaFile(Origine As String, Destinazione As String)

Lanciamo la funzione per ciascun file da copiare:

Call CopiaFile(Sorgente_CABINETS, Destinazione_CABINETS) 
Call CopiaFile(Sorgente_EL_CONTROLS, Destinazione_EL_CONTROLS)
Call CopiaFile(Sorgente_EL_GR, Destinazione_EL_GR

Come ultima cosa copiamo il file contenente le macro dopo averlo salvato per evitare di perdere modifche:

ActiveWorkbook.Save 
Call CopiaFile(Sorgente & FileConMacro, Destinazione & FileConMacro)

A voi il file:
APRI

Riccardo Vincenti

The following two tabs change content below.