habe einen Timer eingebaut, der soll aber nur sein Makro auslösen wenn alle Userforms geschlossen sind.
Wie prüfe ich ab ob alle Userforms geschlossen sind ?
Mit for each ... denke ich aber wie ?
Gruss
Holger Wächter
Option Explicit
Public Sub test()
Dim vbcom
For Each vbcom In Application.VBE.ActiveVBProject.VBComponents
If vbcom.Type = 3 Then
MsgBox vbcom.Name
' If vbcom.Visible = True Then
' MsgBox "Wenigstens eine Userform ist offen."
' Exit For
' Else:
' MsgBox "Alle Userformen zu."
' End If
End If
Next
End Sub
Public Sub test()
If UserForms.Count Then
MsgBox "Wenigstens eine Userform ist offen"
Else:
MsgBox "Alle Userforms geschlossen"
End If
End Sub
Option Explicit
Public Sub test1()
Load UserForm1
test
End Sub
Public Sub test2()
UserForm1.Show vbModeless
test
End Sub
Public Sub test3()
UserForm1.Show vbModeless
UserForm1.Hide
test
End Sub
Public Sub test4()
UserForm1.Show vbModeless
Unload UserForm1
test
End Sub
Public Sub test()
If UserForms.Count Then
MsgBox "Wenigstens eine Userform ist offen"
Else:
MsgBox "Alle Userforms geschlossen"
End If
End Sub
Um in Excel VBA zu prüfen, ob UserForms geöffnet sind, kannst du folgende Funktion verwenden:
Öffne den Visual Basic-Editor (VBE) in Excel.
Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul").
Kopiere und füge den folgenden Code in das Modul ein:
Option Explicit
Function UserformActive() As Boolean
Dim i As Long
UserformActive = False
For i = 0 To UserForms.Count - 1
If UserForms(i).Visible = True Then
UserformActive = True
Exit Function
End If
Next i
End Function
Speichere dein Projekt und schließe den VBE.
Du kannst diese Funktion jetzt in einem anderen Makro oder direkt in einem Arbeitsblatt verwenden, um zu prüfen, ob UserForms geöffnet sind.
Fehlermeldung: "Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher."
Extras > Makro > Sicherheit und aktiviere unter dem Reiter "Vertrauenswürdige Quellen" die Option "Zugriff auf Visual Basic-Projekt vertrauen".UserForms werden nicht richtig gezählt.
Unload und nicht nur mit Hide schließt. Andernfalls bleiben sie im Speicher und werden weiterhin gezählt.Eine weitere Möglichkeit, um zu prüfen, ob UserForms geöffnet sind:
Public Sub CheckUserForms()
If UserForms.Count > 0 Then
MsgBox "Wenigstens eine Userform ist offen."
Else
MsgBox "Alle Userforms geschlossen."
End If
End Sub
Diese Methode zählt einfach die UserForms. Sie funktioniert allerdings nur zuverlässig, wenn die UserForms auch tatsächlich entladen wurden.
Hier sind einige praktische Beispiele zur Verwendung der oben genannten Funktionen:
Überprüfung vor dem Start eines Makros:
Sub StartMyMacro()
If UserformActive() Then
MsgBox "Bitte schließe alle UserForms, bevor du fortfährst."
Exit Sub
End If
' Führe das Makro aus
End Sub
Timer-Event, das nur läuft, wenn alle UserForms geschlossen sind:
Sub TimerEvent()
If Not UserformActive() Then
' Führe die Timeraktion aus
End If
End Sub
Application.VBE.ActiveVBProject.VBComponents, um alle UserForms in deinem Projekt zu durchsuchen. Beachte jedoch, dass dies nur funktioniert, wenn der programmatische Zugriff auf das Visual Basic-Projekt aktiviert ist.1. Warum kann ich Application.VBE nicht verwenden?
Der programmatische Zugriff auf das Visual Basic-Projekt ist möglicherweise nicht sicher. Überprüfe die Einstellungen in Excel unter Extras > Makro > Sicherheit.
2. Wie schließe ich eine UserForm richtig?
Verwende Unload UserFormName, um die UserForm vollständig aus dem Speicher zu entfernen. Hide lässt die UserForm im Speicher, was zu unerwarteten Ergebnissen führen kann.
3. Was mache ich, wenn mein Code nicht funktioniert? Überprüfe, ob alle UserForms korrekt geladen sind und stelle sicher, dass du keine Fehlermeldungen ignorierst. Debugging ist ein wichtiger Teil der Fehlersuche in VBA.