kann mir jemand sagen, wie ich von Mappe1.xls aus per VBA prüfen kann, ob in Mappe2.xls die Userform »UF1« existiert ?
Vielen Dank für Eure Hilfe im voraus.
Gruss
erwin
Sub UF_Suchen()
'24.11.2006, NoNet - www.excelei.de (z.Zt. DOWN !)
Dim Mappe, uf
Dim vbc, gefunden
Mappe = "Mappe2" 'die zu durchsuchende Mappe
uf = "UserForm1" 'der Name des zu suchenden UserForms
gefunden = False
With Workbooks(Mappe).VBProject
For Each vbc In .vbcomponents
If vbc.Type = 3 Then 'Userform
If UCase(vbc.Name) = UCase(uf) Then
gefunden = True
Exit For
End If
End If
Next
End With
MsgBox "Das UserForm '" & uf & "' wurde in " & Mappe & _
IIf(gefunden, "", " nicht") & " gefunden !"
End Sub
Function CheckUfExist(tarWkb As Workbook, ufName As String) As Boolean
Dim n As Long
With tarWkb
For n = .VBProject.VBComponents.Count To 1 Step -1
With .VBProject.VBComponents(n)
'Achtung .Name ist CaseSensitiv
If .Type = 3 And .Name = ufName Then
CheckUfExist = True
Exit Function
End If
End With
Next
End With
CheckUfExist = False
End Function
Sub Test()
MsgBox CheckUfExist(Workbooks("Book2.xls"), "UserForm1")
End Sub
Function VBA_Suchen(Mappe, objName, Optional objTyp As Variant = 3)
'Sucht, ob in einer anderen Mappe ein bestimmtes VBA-Element existiert
'Mappe : die zu durchsuchende Mappe
'objName : der Name des zu suchenden UserForms/SUBs/Function
'objTyp : Der Typ des zu suchendne VBA-Elements : 1=SUB, 2=Function, 3=UF
'Aufruf : msgBox VBA_Suchen("mappe2","MeinMakro",1)
'Oder : msgBox VBA_Suchen("mappe2","MeineUDF",2)
'Oder : msgBox VBA_Suchen("mappe2","UserForm1")
Dim vbc, gefunden, vbZeile
gefunden = False
For Each vbc In Workbooks(Mappe).VBProject.vbcomponents
If vbc.Type = 3 And objTyp = 3 Then 'Userform
If UCase(vbc.Name) = UCase(objName) Then
gefunden = True
Exit For
End If
ElseIf (vbc.Type = 1 Or vbc.Type = 100) And (objTyp = 1 Or objTyp = 2) Then
For vbZeile = 1 To vbc.codemodule.countoflines
If UCase(LTrim(vbc.codemodule.Lines(vbZeile, 1))) Like _
UCase(IIf(objTyp = 1, "SUB ", "FUNCTION ") & _
objName & "(*") Then
gefunden = True
Exit For
End If
Next
End If
Next
If gefunden Then
VBA_Suchen = True
Else
VBA_Suchen = False
End If
End Function
Sub VBAPruefen()
MsgBox VBA_Suchen("mappe2", "MeinMakro", 1)
MsgBox VBA_Suchen("mappe2", "MeineUDF", 2)
MsgBox VBA_Suchen("mappe2", "UserForm1")
End Sub
Function VBA_Suchen(Mappe, objName, Optional objTyp As Variant = 3)
'Sucht, ob in einer anderen Mappe ein bestimmtes VBA-Element existiert
'Mappe : die zu durchsuchende Mappe
'objName : der Name des zu suchenden UserForms/SUBs/Function
'objTyp : Der Typ des zu suchendne VBA-Elements : 1=SUB, 2=Function, 3=UF
'Aufruf : msgBox VBA_Suchen("mappe2","MeinMakro",1)
'Oder : msgBox VBA_Suchen("mappe2","MeineUDF",2)
'Oder : msgBox VBA_Suchen("mappe2","UserForm1")
Dim vbc, gefunden, vbZeile
gefunden = False
For Each vbc In Workbooks(Mappe).VBProject.vbcomponents
If vbc.Type = 3 And objTyp = 3 Then 'Userform
If UCase(vbc.Name) = UCase(objName) Then
gefunden = True
Exit For
End If
ElseIf vbc.Type = 1 And (objTyp = 1 Or objTyp = 2) Then
For vbZeile = 1 To vbc.codemodule.countoflines
If UCase(LTrim(vbc.codemodule.Lines(vbZeile, 1))) Like _
UCase(IIf(objTyp = 1, "SUB ", "FUNCTION ") & _
objName & "(*") Then
gefunden = True
Exit For
End If
Next
End If
Next
If gefunden Then
VBA_Suchen = True
Else
VBA_Suchen = False
End If
End Function
Function CheckUfExist(tarWkb As Workbook, ufName As String) As Boolean
CheckUfExist = tarWkb.VBProject.VBComponents(ufName).Type = 3
End Function
Um zu überprüfen, ob eine Userform in einer anderen Excel-Arbeitsmappe existiert, kannst Du den folgenden VBA-Code verwenden. Dieser Code wird in einer Subroutine ausgeführt und prüft, ob die Userform UF1 in der Arbeitsmappe Mappe2 vorhanden ist.
Sub UF_Suchen()
Dim Mappe As String, uf As String
Dim vbc As Object, gefunden As Boolean
Mappe = "Mappe2" ' die zu durchsuchende Mappe
uf = "UserForm1" ' der Name des zu suchenden UserForms
gefunden = False
With Workbooks(Mappe).VBProject
For Each vbc In .VBComponents
If vbc.Type = 3 Then ' Userform
If UCase(vbc.Name) = UCase(uf) Then
gefunden = True
Exit For
End If
End If
Next
End With
MsgBox "Das UserForm '" & uf & "' wurde in " & Mappe & IIf(gefunden, "", " nicht") & " gefunden!"
End Sub
Fehler: „Laufzeitfehler 1004: Fehler beim Zugriff auf VB-Projekt.“
Fehler: „Das UserForm wurde nicht gefunden.“
Eine andere Möglichkeit zur Überprüfung der Existenz einer Userform ist die Verwendung einer Funktion. Der folgende Code zeigt, wie dies als Funktion implementiert werden kann:
Function CheckUfExist(tarWkb As Workbook, ufName As String) As Boolean
CheckUfExist = tarWkb.VBProject.VBComponents(ufName).Type = 3
End Function
Du kannst diese Funktion dann in einer Subroutine aufrufen, um die Existenz der Userform zu überprüfen.
Hier sind einige praktische Beispiele, wie Du die Funktion zur Überprüfung von UserForms und anderen VBA-Elementen verwenden kannst:
Sub Test()
MsgBox CheckUfExist(Workbooks("Mappe2.xls"), "UserForm1") ' Überprüft UserForm
MsgBox VBA_Suchen("Mappe2", "MeinMakro", 1) ' Überprüft eine Subroutine
MsgBox VBA_Suchen("Mappe2", "MeineUDF", 2) ' Überprüft eine Funktion
End Sub
1. Wie kann ich überprüfen, ob eine Subroutine in einem Klassenmodul existiert?
Du kannst die gleiche Logik verwenden wie bei der Überprüfung von UserForms, indem Du die Typnummer für Subroutinen (1) anpasst.
2. Wo finde ich die VBA-Optionen zur Vertrauensstellung?
Gehe zu „Datei“ > „Optionen“ > „Trust Center“ > „Einstellungen für das Trust Center“ und aktiviere den Zugriff auf das VBA-Projekt.
3. Funktioniert dieser Code in allen Excel-Versionen?
Der Code sollte in den meisten modernen Excel-Versionen funktionieren, solange VBA aktiviert ist. Achte darauf, dass die Makros in den Excel-Einstellungen erlaubt sind.