Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Copiare n moduli macro in un altro file Opzioni
aetio
Inviato: Saturday, August 06, 2011 9:25:44 AM

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
Sponsor
Inviato: Saturday, August 06, 2011 9:25:44 AM

 
aetio
Inviato: Saturday, August 06, 2011 9:35:16 AM

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
a10n11
Inviato: Saturday, August 06, 2011 10:38:26 AM

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




aetio
Inviato: Saturday, August 06, 2011 11:27:48 AM

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
a10n11
Inviato: Saturday, August 06, 2011 11:30:21 AM

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

aetio
Inviato: Saturday, August 06, 2011 11:51:00 AM

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
a10n11
Inviato: Saturday, August 06, 2011 12:02:31 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
non trova la libreria indicata. sicuro di averla aggiunta nei riferimenti?
saluti
Giap

aetio
Inviato: Saturday, August 06, 2011 12:20:50 PM

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
a10n11
Inviato: Saturday, August 06, 2011 12:42:36 PM

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

aetio
Inviato: Saturday, August 06, 2011 2:12:32 PM

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
a10n11
Inviato: Sunday, August 07, 2011 11:56:09 AM

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

d4rkheart
Inviato: Sunday, August 07, 2011 5:34:57 PM

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.
aetio
Inviato: Sunday, August 07, 2011 9:48:06 PM

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
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.