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
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