Quindi tu pensi che invece di copiare dei dati da un foglio Excel a un altro sia piu' semplice importarne le macro? Come vedi non lo e' perche' parliamo dei moduli vba dei fogli di lavoro.
Anzi, tra
copiare i dati su un foglio gia' con macro,
copiare le macro da un workbook a un altro, o
importare le macro da un file .cls hai scelto (sempre nel caso in oggetto) la via piu' complicata...
Se vuoi lavorare partendo dal file .cls (quello ottenuto esportando le macro da un file che le contiene) allora devi sapere che non si puo' fare in modo diretto: va prima creato l'evento da gestire (ogni evento da gestire) e al suo interno vanno posizionate le linee di codice.
Un esempio:
- Codice: Seleziona tutto
Sub InserisciSheetModuleDaFile()
Dim Modulo As String, DeSh As String, PreL As String
Dim RigaF, InCode As Boolean, LineCtr As Long
'
Modulo = "D:\DDocs\Pippo_Foglio1.cls" '<<< Percorso e Nome del modulo
DeSh = Sheets("Foglio1").CodeName '<<< Nome del foglio di destinazione
'
FreeF = FreeFile()
Open Modulo For Input As #FreeF
With ActiveWorkbook.VBProject.VBComponents(DeSh).CodeModule
Do While Not EOF(FreeF)
Line Input #FreeF, RigaF
Debug.Print RigaF
If InStr(1, RigaF, "End Sub", vbTextCompare) = 1 Then
InCode = False
LineCtr = 0
Else
If InStr(1, RigaF, "_SelectionChange", vbTextCompare) > 0 Then
InCode = True
PreL = "' "
LineCtr = .CreateEventProc("SelectionChange", "Worksheet") 'Prepara l'evento Worksheet_SelectionChange
ElseIf InStr(1, RigaF, "_Change", vbTextCompare) > 0 Then
InCode = True
PreL = "' "
LineCtr = .CreateEventProc("Change", "Worksheet") 'Prepara l'evento Worksheet_cHANGE
ElseIf InStr(1, RigaF, "_Activate", vbTextCompare) > 0 Then
InCode = True
PreL = "' "
LineCtr = .CreateEventProc("Activate", "Worksheet") 'Prepara l'evento Worksheet_Activate
ElseIf InStr(1, RigaF, "_altroEvento", vbTextCompare) > 0 Then 'Preparazione altri eventi
InCode = True
PreL = "' "
LineCtr = .CreateEventProc(tipoEvento, tipoOggetto)
ElseIf InStr(1, RigaF, "_AltroEvento", vbTextCompare) > 0 Then 'Preparazione altri eventi
End If
End If
If InCode Then
LineCtr = LineCtr + 1
.InsertLines LineCtr, PreL & RigaF
PreL = ""
End If
Loop
End With
Close #FreeF
End Sub
Le righe marcate <<< vanno personalizzate come da commento
Dopo aver inserito il codice in un file di servizio devi rendere attivo il file che contiene il foglio su cui vuoi aggiungere le macro e lanciare la Sub InserisciSheetModuleDaFile
Tieni presente che in questo modo non potrai inserire dichiarazioni in testa al modulo
Rimango convinto che quanto avevo suggerito nel primo post sia piu' semplice.
Ciao