Domanda:
Ho una macro che per eseguire le varie operazioni previste necessita dell’apertura di più file ogni volta di nome diverso. Avrei pertanto bisogno di creare una MsgBox all’interno della macro per selezionare i file che devono essere uitilizzati. Ringrazio in anticipo per la Vostra attenzione.
Risposta:
Per selezionare un file esterno al file in uso, per poi utilizzarlo come base dati,
si può utilizzare comodamente il file dialog di Windows chiamato “msoFileDialogFilePicker”
Lo si dichiara e lo si apre con le seguenti istruzioni:
Dim fDialog As Office.FileDialog Set fDialog = Application.FileDialog(msoFileDialogFilePicker) With fDialog .AllowMultiSelect = False .Title = "Seleziona il file da aprire" .InitialFileName = ThisWorkbook.Path & "\Archivio" 'DA MODIFICARE If .Show = -1 Then For Each selezione In .SelectedItems FileDaAprire = selezione Next Else MsgBox "Operazione annullata!", vbInformation Exit Sub End If End With
La proprietà “.InitialFileName” permette di indicare la cartella predefinita da far apparire alla sua apertura. Nell’esempio ho impostato una cartella “Archivio” contenuta nella stessa cartella del file dal quale si lancia la macro:
.InitialFileName = ThisWorkbook.Path & “\Archivio”
Per impostare come predefinita la cartella “Documenti”, potete modificare in:
.InitialFileName = “C:\Documenti”
Se non si seleziona nessun file e si preme “Cancella” viene aperto il messaggio “Operazione annullata!” ed interrotta l’esecuzione della macro.
Una volta selezionato il file da aprire, assegno ad esso un variabile da utilizzare per richiamarlo
(tale variabile comprende il percorso del file ed il suo nome)
For Each selezione In .SelectedItems FileDaAprire = selezione Next
Utilizzo la seguente istruzione per aprire il file selezionato utilizzando la variabile sopradefinita (che comprende il percorso del file)
Application.Workbooks.Open (FileDaAprire)
e subito definisco la variabile che contiente solo il nome del file appena aperto.
Servirà per chiudere la finestra excel una volta terminate le istruzioni della macro.
Una volta aperto il file si possono inserire le righe di codice per il proprio scopo.
Nel caso d’esempio, cerco all’interno delle intestazioni quella chiamata “TOTALE”, e ne copio i dati dalla prima all’ultima riga del foglio
Range(Cells(2, COL_TOTALE), Cells(Last_Row, COL_TOTALE)).Select
Selection.Copy
Attivo quindi il file contenente la macro
Windows(NomeFileConMacro).Activate
che ho provveduto a parametrizzare all’inizio della routine
NomeFileConMacro = ThisWorkbook.Name
A questo punto posso incollare i dati a partire dall’ultima cella non vuota
Sheet1.Select Last_Row = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Cells(Last_Row + 1, 3).Select ActiveSheet.Paste
Terminate le operazioni da fare, chiudo il file che avevo selezionato
Windows(NomeFileDaAprire).Close
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
Buongiorno Riccardo,
Ho trovato molto utile la tua macro ma poiché non sono molto ferrato in materia ho fatto diverse prove ma credo di aver fatto solo dei casini eppure la soluzione al mio problema penso sia molto più semplice di quanto immagini, ma non riesco a venirne fuori!
In sostanza ho questa necessità.
Ho 6 fogli in tutto.
il primo foglio si chiama COPERTINA.
Ho bisogno di una macro che mi consenta di scegliere un file immagine qualsiasi (jpeg, tif, ico, etc…) da una qualsiasi cartella del pc e che lo inserisca nella cella B2 del foglio COPERTINA, dimensionandolo con altezza 1cm.
dopodiché copiarlo e incollarlo nei restanti 5 fogli ,sempre nella cella B2.
Stop.
Sarò stupido ma sono 3 gg che cerco di risolvere questa cosa e non ci riesco.
Grazie per ogni aiuto e consiglio!
Buongiorno
le consiglio di attivare il “registra macro”, fare una volta l’operazione e fermare la registrazione macro.
portà poi entrare nel codice che Excel ha registrato e sarà un gioco da ragazzi modificarlo o copiarlo nella sua macro.
cordiali saluti
Andrea
Grazie Andrea,
In effetti è proprio ciò che ho fatto qualche giorno di aver postato e confermo che, per questo tipo di macro, la cosa è stata davvero facile!