AW: VBA-Code in Workbook_Open Methode per VBA einfügen
06.05.2015 19:08:42
fcs
Hallo Jörg,
dazu muss man die Code-Zeilen aus dem Modul "DieseArbeitsmappe" von Datei A auslesen und in der Datei C unter "DieseArbeitsmappe" einfügen.
In der Summe dürfte es aber einfacher sein eine Vorlagedatei zu erstellen, die das Userform und die erforderlichen Makros enthält, und dann die Daten der CSV-Datei jeweils in eine Kopie der Vorlagedatei zu schreiben. Das hat auch den Vorteil, dass du nicht den Zugriff auf das VBA-Projekt erlauben muss, wenn du per VBA den Code "manipulierst".
Gruß
Franz
Sub Copy_VBA_Code_von_DateA_nach_DateiC()
'Zur Ausführung der Prozedur muss:
'1. Im VBA-Editor unter Extras--> Verweise... _
der Verweis auf die _
Microsoft Visual Basic for Applications Extensibility x.x _
aktiviert werden
'2. In Excel unter Extras --> Optionen --> Sicherheit --> Makrosicherheit _
die Option "Zugriff auf das VB-Projekt vertrauen" aktiviert werden.
Dim VBA_A As VBProject, VBA_C As VBProject
Dim wkbA As Workbook, wkbC As Workbook
Dim myVBComponent As VBComponent, varFileName, varFolder, strCode As String
Dim strFile As String
Set wkbA = ThisWorkbook
Set VBA_A = wkbA.VBProject
Set wkbC = Workbooks("Datei_C.xlsm") 'Ziel-Arbeitsmappe entsprechend setzen/anpassen
Set VBA_C = wkbC.VBProject
'Ordner für Export/Import-Code-Files
varFolder = wkbA.Path & Application.PathSeparator
'Userform-Module von A nach B übertragen
Set myVBComponent = VBA_A.VBComponents("Userform1") 'name anpassen
With myVBComponent
varFileName = varFolder & .Name & ".frm"
.Export Filename:=varFileName
End With
VBA_C.VBComponents.Import Filename:=varFileName
Kill varFileName
Kill varFolder & Application.PathSeparator & myVBComponent.Name & ".frx"
'Allgemeine-Module von A nach B übertragen
Set myVBComponent = VBA_A.VBComponents("Modul_UF") 'Name anpassen
With myVBComponent
varFileName = varFolder & .Name & ".bas"
.Export Filename:=varFileName
End With
VBA_C.VBComponents.Import Filename:=varFileName
Kill varFileName
'Code von DieseArbeitsmappe/ThisWorkbook übertragen
'Code in Datei A in Variable einlesen
Set myVBComponent = VBA_A.VBComponents("DieseArbeitsmappe") 'Name evtl anpassen (englisch)
With myVBComponent
If .CodeModule.CountOfLines >= 1 Then
strCode = .CodeModule.Lines(1, .CodeModule.CountOfLines)
Else
strCode = ""
End If
End With
'Code in Datei C einfügen
If strCode <> "" Then
Set myVBComponent = VBA_C.VBComponents("DieseArbeitsmappe")
With myVBComponent
If .CodeModule.CountOfLines >= 1 Then
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End If
.CodeModule.AddFromString strCode
End With
End If
End Sub