|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, devo copiare una serie di moduli macro da un file ad un altro, ma non ho trovato spiegazioni sul metodo da usare. Ho provato con la selezione multipla (sistema classico Maiusc. o Ctrl+selezione celle), ma non funziona. Il metodo esporta/importa si attiva con un singolo modulo, ma ho necessità di esportare parecchi moduli... Qual'è il metodo? In rete non ho trovato nulla di interessante... Grazie assai e buona giornata, eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Edit: forse ho trovato > in Windows7 il file Personal è nel percorso C:\Users\username\AppData\Roaming\Microsoft\Excel\XLSTART Non riuscivo a localizzarlo... allora ho usato il metodo: apri Excel combinazione Alt+F11 > apri l'editor VBA combinazione Ctrl+g > apri la finestra "immediata" scrivi ?Application.StartupPath e ti viene indicato il percorso della cartella XLSTART in cui c'è il file Personal
Comunque se c'è un altro metodo per l'esportazione multipla di moduli è sempre ben accettato :)) Saluti, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve io ti posto la mia soluzione. Per esportare tutti i moduli in una cartella (Moduli standard .Bas) Sub esporta_moduliVBA() '-------------------------- '// Si deve aggiungere un riferimento alla Library: - '// "Microsoft Visual Basic forApplications Extensibility 5.3" '// Menù> Strumenti | Riferimenti '-------------------------- Dim VBComp As VBIDE.VBComponent Dim VBComps As VBIDE.VBComponents Dim miapath As String miapath = "c:\pippo" ' cambia la destinazione a tuo piacimento Set VBComps = ThisWorkbook.VBProject.VBComponents For Each VBComp In VBComps If VBComp.Type = 1 Then VBComp.Export miapath & "\" & VBComp.Name & ".bas" End If Next VBComp End Sub Per importarli in un nuovo progetto: NB: la macro che segue sarebbe bene inserirla in un modulo del nuovo progetto che non si chiami come i nomi dei moduli da importare. Es. se si deve importare il Modulo1 e si vuole mantenere lo stesso nome, il modulo che contiene la macro seguente dovrà avere un altro nome altrimenti il codice importato verrà rinominato. Sub importa_Bas() miapath = "c:\pippo\" ChDir miapath FileName = Dir("*.bas") If FileName = "" Then Exit Sub While FileName <> "" Application.VBE.ActiveVBProject.VBComponents.Import _ (FileName) FileName = Dir Wend End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Innanzi tutto Grazie... come sempre sei anche velocissimo nel dare la soluzione, oltreché dai sempre la soluzione migliore!! Non ho ben capito se devo seguire questa procedura: -aggiungo il riferimento alla library (sia nel file di export che in quello di import) -nel file in cui devo ESPORTARE scrivo la macro "esporta_moduliVBA" e invece di pippo scrivo il percorso completo del file in cui vorrei importare i moduli -nel file in cui devo IMPORTARE scrivo la macro "importa_Bas", indicando il percorso completo del file -dal file di ESPORTAZIONE lancio la macro "esporta_moduliVBA" -dal file di IMPORTAZIONE lancio la macro "importa_Bas" Prima di procedere vorrei essere certo di non combinare guai... qui è come maneggiare la nytro... :))) Grazie assai e buona giornata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve interpretazione corretta. lavorando sul VBA si consiglia sempre di fare una copia di riserva. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, ho seguito la procedura tenendo aperti i due files (quello di export e quello di import, entrambi .xlsm abilitati alle macro ed entrambi col riferim. della libreria aggiunto regolarmente...), ma lanciando la macro dal file di export restituisce Errore di Run-time'1004' > Metodo VBProject dell'oggetto'_Workbook' non riuscito evidenziando il codice Set VBComps = ThisWorkbook.VBProject.VBComponents ho controllato il percorso di destinazione: è completo ed esatto... Grazie assai, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve non trova la libreria indicata. sicuro di averla aggiunta nei riferimenti? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto:salve non trova la libreria indicata. sicuro di averla aggiunta nei riferimenti? saluti Giap affermativo, controllato più volte... è aggiunta anche nel file di destinazione... ma scanso equivoci della mega cippa :)) il percorso "pippo" si riferisce al file .xlsm di destinazione dei moduli, vero?? Grazie assai. Saluti, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve io do' per scontato (e a volte sbaglio) che il livello di protezioni delle macro sia stato adeguato. controlla nelle protezioni macro che sia spuntata la voce "Considera attendibile l'accesso al modello a oggetti dei progetti VBA" saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: io do' per scontato (e a volte sbaglio) che il livello di protezioni delle macro sia stato adeguato.
...beh!! uno sbaglio di per sé è un'entità negativa, mentre qui se non ci fosse stata quest'inceppatura io non avrei imparato un'altra cosa (importante...!) per cui qui "lo sbaglio" è stato un'entità positiva che ha creato qualcosa di positivo... :))) ...era proprio quello!! Nelle impostazioni centro protezione > Impostazioni macro avevo attivato l'opzione 'attiva tutte le macro' ma non sospettavo minimamente che bisognasse anche spuntare la voce 'Considera attendibile l'accesso al modello a oggetti dei progetti VBA' !! Riepologando: -aggiungo il riferimento alla library (sia nel file di export che in quello di import) -creo una cartella che nomino "Moduli_Standar.Bas" in cui parcheggerò i moduli da esportare/importare -nel file in cui devo ESPORTARE scrivo la macro "esporta_moduliVBA" e invece di pippo scrivo il percorso completo della Cartella "Moduli_Standar.Bas" in cui la macro esporterà i moduli -nel file in cui devo IMPORTARE scrivo la macro "importa_Bas", indicando il percorso completo della Cartella "Moduli_Standar.Bas" da cui la macro importerà i moduli -dal file di ESPORTAZIONE lancio la macro "esporta_moduliVBA" -dal file di IMPORTAZIONE lancio la macro "importa_Bas" -una volta effettuata l'operazione potrò svuotare la cartella "Moduli_Standar.Bas" per renderla disponibile ad un'altra operazione di import-export. -L'importante è che nei moduli dello stesso file non vengano importati due "Modulo1" altrimenti colliderebbero. Se ciò che ho scritto è corretto il problema è come sempre stato risolto in maniera impeccabile... Complimenti per le due macro: due gioielli!! Grazie infinite e buon pomeriggio, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto: ma non sospettavo minimamente che bisognasse anche spuntare la voce 'Considera attendibile l'accesso al modello a oggetti dei progetti VBA' !!
Salve quella in argomento, è una protezione importante. Consente di evitare che un codice maligno proveniente da un documento apparentemente innocuo possa contenere del codice che possa andare a modificare l'ambiente VBA saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/9/2011 Posts: 132
|
a10n11 ha scritto:aetio ha scritto: ma non sospettavo minimamente che bisognasse anche spuntare la voce 'Considera attendibile l'accesso al modello a oggetti dei progetti VBA' !!
Salve quella in argomento, è una protezione importante. Consente di evitare che un codice maligno proveniente da un documento apparentemente innocuo possa contenere del codice che possa andare a modificare l'ambiente VBA saluti Giap Chiedo scusa ad Aetio per l'intrusione. @a10n11, grazie per il prezioso suggerimento.
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: quella in argomento, è una protezione importante. Consente di evitare che un codice maligno proveniente da un documento apparentemente innocuo possa contenere del codice che possa andare a modificare l'ambiente VBA
Grazie!! @d4rkheart nessuna intrusione... ci mancherebbe altro... :)) Saluti, eZio
|
|
Guest |