Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
820to824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
820to824
820to824
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Auf Existenz einer Userform prüfen per VBA
24.11.2006 12:48:00
eres
Hallo Excel-Freunde,
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

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Prüfen, ob anderen Mappe ein bestimmtes UF enthält
24.11.2006 13:08:29
NoNet
Hallo Erwin,
hier mein vorschlag :


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


Anzeige
AW: Auf Existenz einer Userform prüfen per VBA
24.11.2006 13:11:32
ramses
Hallo
Geht schon, einfach als Funktion einsetzen
Option Explicit

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

ACHTUNG: Auf Gross- und KleinSchreibung achten beim Userform-Name oder mit UCASE entsprechend umstellen wenn es unabhängig sein soll.
Gruss Rainer
Anzeige
Klappt prima. Vielen Dank an Rainer + NoNet o.T.
24.11.2006 13:34:08
eres
.
Nachfrage:
24.11.2006 13:55:57
eres0107
Gibt es so etwas ähnliches auch für die Prüfung aus Mappe1.xls per VBA, ob in einem der Arbeitsblätter der Mappe2.xls die »Sub Program1« existiert ?
Vielen Dank im voraus für jede Hilfe.
Gruss
erwin
AW: Nachfrage:
24.11.2006 14:02:54
ramses
Hallo
was meinst du damit:
"..ob in einem der Arbeitsblätter der Mappe2.xls die »Sub Program1«..."
Ist die Sub in einem Klassenmodul der Tabelle oder in einem eigenen Modul der Mappe ?
Gruss Rainer
AW: Nachfrage:
24.11.2006 14:05:56
eres
Rainer, sorry für die Ungenauigkeit.
Die Sub suche ich im Klassenmodul der Tabelle.
Gruss
erwin
*fg* - Ausgerechnet die Klassenmodule...
24.11.2006 15:02:15
NoNet
...hatte ich nicht berücksichtigt ;-)
Hier der ergänzte Code :


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

Anzeige
AW: *fg* - Ausgerechnet die Klassenmodule...
24.11.2006 15:05:50
eres
wollte mich gerade melden ...
Toll, wenn die Lösung kommt, bevor man das Problem beschrieben hat.
Herzlichen Dank nochmals und Gruss aus Köln
erwin
UDF (Function) zum Prüfen von VBA-Elementen
24.11.2006 14:41:37
VBA-Elementen
Hallo Erwin,
ich habe das Makro nun um die Prüfmöglichkeit für SUBs, UDFs und USerForms erweitert :


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

Anzeige
Herzlichen Dank NoNet (o.T.) & have a nice weekend
24.11.2006 14:50:07
eres
.
kleine Optimierung
24.11.2006 20:08:21
Daniel
Hallo,
kleine Optimierung zur Funktion, es bringt zwar nicht viel,aber Schleifen und IF-Abfragen sollten möglichst vermieden werden. Die Funktion lässt sich so auf eine Zeile reduzieren:

Function CheckUfExist(tarWkb As Workbook, ufName As String) As Boolean
CheckUfExist = tarWkb.VBProject.VBComponents(ufName).Type = 3
End Function

Gruß, Daniel
AW: kleine Optimierung
27.11.2006 07:43:54
eres
Vielen Dank Daniel,
werde ich gerne berücksichtigen.
Gruss
erwin

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige