Module aus AddIn einlesen_Teil2
27.02.2017 16:54:38
Peter
Dein Makro lief sehr gut und plötzlich erhalte ich Fehler.
Könntest du bitte mir noch einmal Helfen?
Dein Makro habe ich in "Diese Arbeitsmappe" eingefügt.
Das Makro sieht jetzt so aus.
Private Sub XXXXX()
Option Explicit
'Zuerst wird das AdInn mit allen Modulen geladen
Dim AddInnpfad, AddInName1, AddInName2 As String
Dim intAddIn As Integer
Dim AddInInstalliert As Boolean
Dim AddInInstallieren As Boolean
Dim AI As Excel.AddIn
Dim AdInnpfad As String
AdInnpfad = "C:\Test\AddIns-nicht löschen\"
AddInName1 = "AddIn_TestX.xlam"
AddInName2 = AdInnpfad & AddInName1
AddInDatum = FileDateTime(AddInName2)
' Die Namen aller installierten Addins prüfen
For intAddIn = 1 To AddIns.Count
If AddIns(intAddIn).Name = AddInName1 Then
AddInInstalliert = True
Exit For
End If
Next intAddIn
' Addin installieren
On Error Resume Next
Set AI = Application.AddIns.Add(Filename:=AddInName2)
AI.Installed = True
Application.AddIns(AddInName1).Installed = True
End Sub
Bis hierhin funktioniert alles
'Module einlesen
Private Sub Demo()
Const cQuellDateiName = "AddIn_TestX.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 = True)
Hier erhalte ich den Fehler: Fehler beim Kompilieren: Benutzerdefinierter Typ nich definiert. Was habe ich falsch gemacht?
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
LG,
Peter