VBA Compilerfehler?!
21.08.2019 13:37:15
Bernd
ich habe ein Problem und weiß nicht wie ich es lösen kann.
Dazu muss ich etwas "ausholen". Ich soll für meine Firma eine Liste entwerfen, die an allen unseren (internationalen) Standorten funktioniert.
Um das dennoch zu erreichen muss ich ggf. auch zusätzliche Add-Ins, Bibliotheken,... usw. über den Makrocode einbinden.
Leider bekomme ich von unserer lokalen IT praktisch keine Hilfe.
In unserem Unternehmen kommen zwischen Excel 2010 - 2016 alle Versionen zum Einsatz.
Dazu habe ich folgendes Makro im Internet gefunden, welches ich bei Workbook_Open direkt aufrufe. Da das Makro aus 2004 stammt und auf meinem 2016er Excel läuft sehe ich erstmal keine Kompatibilitätsprobleme.
1. VB Referenzen auslesen
Sub Grab_References()
' Ritchie (UK), Ozgrid, 05.09.2004
' http://ozgrid.com/forum/showthread. _
_
php?t=22504
Dim n As Integer, l As Long, c As Integer, lastR As Long
Dim VBPRef As Object
On Error GoTo errhandler
With ThisWorkbook
Set VBPRef = .VBProject.References
With Sheets("Debug")
l = 1
.Cells(l, 1).Value = "Count"
.Cells(l, 2).Value = "Name"
.Cells(l, 3).Value = "Description"
.Cells(l, 4).Value = "GUID"
.Cells(l, 5).Value = "Major"
.Cells(l, 6).Value = "Minor"
.Cells(l, 7).Value = "Full path"
.Cells(l, 8).Value = "Standard value"
.Cells(l, 11).Value = "Count"
.Cells(l, 12).Value = "Name"
.Cells(l, 13).Value = "Description"
.Cells(l, 14).Value = "GUID"
.Cells(l, 15).Value = "Major"
.Cells(l, 16).Value = "Minor"
.Cells(l, 17).Value = "Full path"
.Cells(l, 18).Value = "Standard value"
.Range("A" & l, "R" & l).Font.Bold = True
lastR = .Cells(Rows.Count, 1).End(xlUp).Row 'mod.
.Range(.Cells(l + 1, 1), .Cells(lastR + 1, 18)).Clear
On Error Resume Next
For n = 1 To VBPRef.Count
l = l + 1
.Cells(l, 1).Value = n
.Cells(l, 2).Value = VBPRef.Item(n).Name
.Cells(l, 3).Value = VBPRef.Item(n).Description
.Cells(l, 4).Value = VBPRef.Item(n).GUID
.Cells(l, 5).Value = VBPRef.Item(n).Major
.Cells(l, 6).Value = VBPRef.Item(n).Minor
.Cells(l, 7).Value = VBPRef.Item(n).FullPath
.Cells(l, 8).Value = VBPRef.Item(n).BuiltIn
Next n
.Columns("A:R").EntireColumn.AutoFit
End With
Set VBPRef = Nothing
End With
Call CheckReferences
errhandler:
End Sub
2. VB Referenzen auf aktuellem Rechner prüfen ob vorhanden
Public Sub CheckReferences()
Dim i As Integer, l As Integer
On Error GoTo errhandler
l = 1
For i = 1 To ThisWorkbook.VBProject.References.Count
l = l + 1
If ThisWorkbook.VBProject.References(i).IsBroken Then
With Sheets("Debug")
.Cells(l, 11).Value = i
.Cells(l, 12).Value = ThisWorkbook.VBProject.References.Item(i).Name
.Cells(l, 13).Value = ThisWorkbook.VBProject.References.Item(i).Description
.Cells(l, 14).Value = ThisWorkbook.VBProject.References.Item(i).GUID
.Cells(l, 15).Value = ThisWorkbook.VBProject.References.Item(i).Major
.Cells(l, 16).Value = ThisWorkbook.VBProject.References.Item(i).Minor
.Cells(l, 17).Value = ThisWorkbook.VBProject.References.Item(i).FullPath
.Cells(l, 18).Value = ThisWorkbook.VBProject.References.Item(i).BuiltIn
End With
' ThisWorkbook.VBProject.References.Remove _
' ThisWorkbook.VBProject.References(i)
' Exit For
End If
Next i
Call GUID_einbinden
errhandler:
End Sub
3. Falls nicht vorhanden die entsprechenden Daten laden
Public Sub GUID_einbinden()
Dim ref
Dim objReferences As Object
Dim i As Integer, l As Integer
On Error GoTo errhandler
With Sheets("Debug")
l = .Cells(Rows.Count, 11).End(xlUp).Row
For i = 2 To l
If .Cells(i, 11).Value "" Then
On Error Resume Next
Set ref = Application.VBE.ActiveVBProject.References.AddFromGuid(.Cells(i, 14).Text, . _
_
Cells(i, 15).Value, .Cells(i, 16).Value)
End If
Next i
End With
errhandler:
End Sub
Damit hoffte ich alle Probleme lösen zu können, allerdings wirft dieser Ablauf auf fremden Rechnern (ebenfalls Excel 2016) ein für mich unbekannten Fehler.
Das ausgeblendete Modul "Choose" ist eine Userform, mit der Mitarbeiter die Bearbeitung der Liste durchführen sollen und besteht nur aus Optionbuttons.
Ich hoffe jemand kann mir sagen, was das für ein Fehler ist und wie ich ihn ggf. beheben kann.
Vielen Dank!
Grüße, Bernd