AW: Module aus AddIn einlesen
10.02.2017 10:33:46
littletramp
Hallo Peter
Hier der versprochene Code (Download-Link: https://www.herber.de/bbs/user/111362.xlsm
-> Code in DieseArbeitsmappe).
Im Code muss der Name der Quelldatei angepasst werden (siehe 'TODO: )
Falls der Code in einem anderen Projekt verwendet wird, so muss ein Verweis auf die "Microsoft Visual Basic for Applications Extensibility" Objektbibliothek erstellt werden (in IDE -> Menü Extras | Verweise).
Der Code darf sich nicht in einem Standardmodul befinden, da dieses sonst ebenfalls gelöscht wird!!!
Private Sub Demo()
Const cQuellDateiName = "MAS_CodeElementeEinfügen.xlam" 'TODO: Name anpassen
' Komponenten importieren
ImportVBComponents NameSourceProjectFile:=cQuellDateiName, _
DeleteExistingComponents:=True
End Sub
Private Sub DeleteVBComponents()
Dim vbcItem As VBComponent
For Each vbcItem In ThisWorkbook.VBProject.VBComponents
' Standardmodule, UserForms und Klassenmodule löschen
Select Case vbcItem.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, vbext_ct_ClassModule
ThisWorkbook.VBProject.VBComponents.Remove vbcItem
End Select
Next
' Aufräumen
Set vbcItem = Nothing
End Sub
' Wenn DeleteExistingComponents True ist, so werden vor dem
' Importieren die bestehenden Komponenten gelöscht werden!
Private Sub ImportVBComponents(ByVal NameSourceProjectFile As String, _
Optional DeleteExistingComponents As Boolean = False)
Dim vbcItem As VBComponent
Dim wbkSource As Workbook
Dim strTempFile As String
If DeleteExistingComponents Then DeleteVBComponents
strTempFile = ThisWorkbook.Path & "\Temp" ' !!! ohne Extension!
' Bestehende Log-Datei löschen
If Len(Dir(strTempFile & ".log")) Then Kill strTempFile & ".log"
Set wbkSource = Workbooks(NameSourceProjectFile)
For Each vbcItem In wbkSource.VBProject.VBComponents
Select Case vbcItem.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, vbext_ct_ClassModule
' Komponente exportieren
vbcItem.Export strTempFile & ".tmp"
' Komponente importieren
ThisWorkbook.VBProject.VBComponents.Import strTempFile & ".tmp"
' Temp-Dateien löschen
If Len(Dir(strTempFile & ".tmp")) Then Kill strTempFile & ".tmp"
If Len(Dir(strTempFile & ".frx")) Then Kill strTempFile & ".frx"
End Select
Next
' Prüfen ob Import-Fehler auftraten
If Len(Dir(strTempFile & ".log")) Then
MsgBox "Beim Importieren sind Fehler aufgetreten!" & vbLf & vbLf _
& "Details siehe:" & vbLf _
& strTempFile & ".log", _
vbExclamation
End If
'--- Aufräumen ---
Set wbkSource = Nothing
Set vbcItem = Nothing
End Sub
Gruss Markus