Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob noch UserForms geöffnet sind !!!

Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 10:50:21
Holger
Hallo zusammen,
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
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 11:28:12
bst
Hallo Holger,
wenn Du die Userforms mit Unload beendest und nicht mit Hide sollte es ausreichen UserForms.Count abzufragen.
HTH, Bernd
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 12:24:49
Holger
Hallo Bernd,
mit Count kann ich das leider nicht machen da ich nicht alle Unloade. Kennst Du noch eine Lösung ?
Gruss
Holger
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 12:42:28
bst
Hi Holger,
versuch's mal so.
HTH, Bernd
--
Option Explicit

Function UserformActive() As Boolean
    Dim i%
    
    UserformActive = False
    For i = 0 To UserForms.Count - 1
        If UserForms(i).Visible = True Then
            UserformActive = True
            Exit Function
        End If
    Next
End Function


Anzeige
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 16:00:22
Holger
Das ist die LÖSUNG !!!
Alles klar funktioniert. Er geht alle Userforms durch die Hide oder Visible = true sind und wenn eine Visible = true ist wird dieses erkannt.
Vielen Dank
Holger
AW: Prüfen ob noch UserForms geöffnet sind !!!
ransi
Hallo Holger
Als Ansatz:


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


.visible funzt allerdings leider genauso wenig wie
.hidden
oder
.enabled
darum "Frage noch offen"
Vieleicht hilfts dir trotzdem weiter.
ransi
Anzeige
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 12:16:28
Holger
Hallo ransi,
leider sagt er mir schon bei der Zeile 'Application.VBE.ActiveVBProject.VBComponents' :
Die Methode 'VBE' für das Objekt '_Application' ist fehlgeschlagen
Was kann ich tuen ?
Gruss
Holger
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 12:26:24
Holger
Sorry,
die Fehlermeldung ist: Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher.
Wie kann ich das umgehen ?
Gruss
Holger
Anzeige
AW: Prüfen ob noch UserForms geöffnet sind !!!
ransi
Hallo Holger
Menu extras-Makro-Sicherheit
Register "Vertrauenswürdige Quellen"
Hak da mal "Zugriff auf Visual Basic Projekt vertrauen an".
Ich glaube auch das ein Verweis von diesen für Application.VBE... zuständig ist.
VBA--&gtC:\Programme\Gemeinsame Dateien\Microsoft Shared\VBA\VBA6\VBE6.DLL
Excel--&gtC:\Programme\Microsoft Office\Office10\EXCEL.EXE
stdole--&gtC:\WINDOWS\system32\stdole2.tlb
Office--&gtC:\Programme\Gemeinsame Dateien\Microsoft Shared\Office10\MSO.DLL
MSForms--&gtC:\WINDOWS\system32\FM20.DLL
Die habe ich zumindest gesetzt.
ransi
Anzeige
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 12:42:04
Holger
Alles klar,
Haken gesetzt und es klappt. Wie kann ich nun in dem Code von Dir die Abfrage hinkriegen. Habe da bis jetzt auch noch nichts geschafft.
Gruss
Holger
AW: Prüfen ob noch UserForms geöffnet sind !!!
18.07.2006 13:17:41
Holger
Hi,
man kann mit .activate abfragen, aber wenn ich das darüber laufen lasse, werden alle geöffneten UserForms einfach geschlossen.
Bitte um Hilfe
Gruss
Holger
Anzeige
AW
ransi
Hallo
Das war irgendwie zu einfach um auf Anhieb drauf zukommen:


Public Sub test()
If UserForms.Count Then
    MsgBox "Wenigstens eine Userform ist offen"
Else:
    MsgBox "Alle Userforms geschlossen"
End If
End Sub


Aus der Hilfe:
"Die UserForms-Auflistung ist eine Auflistung, deren Elemente jedes geladene UserForm in einer Anwendung darstellen. Die UserForms-Auflistung besitzt eine Count-Eigenschaft,.."
ransi
Anzeige
AW: AW
18.07.2006 15:55:13
Holger
Hi,
die Lösung kam ja schon von Berndt. Er meinte aber das klappt nur wenn alle Userforms unloaded sind und nicht nur hidden ?
Gruss
Holger
AW: AW
ransi
Hallo Holger
Teste mal:


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


Wenn die Userform geladen aber nicht sichtbar ist wird sie auch gezählt.
ransi
Anzeige
AW: AW
18.07.2006 16:14:07
Holger
Genau das war mein Problem.
Lösung steht weiter oben vom Berndt.
Vielen Dank auch für Deine Mühen
Gruss
Holger
;
Anzeige
Anzeige

Infobox / Tutorial

UserForms in Excel VBA: Überprüfen, ob sie geöffnet sind


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu prüfen, ob UserForms geöffnet sind, kannst du folgende Funktion verwenden:

  1. Öffne den Visual Basic-Editor (VBE) in Excel.

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul").

  3. 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
  4. Speichere dein Projekt und schließe den VBE.

  5. Du kannst diese Funktion jetzt in einem anderen Makro oder direkt in einem Arbeitsblatt verwenden, um zu prüfen, ob UserForms geöffnet sind.


Häufige Fehler und Lösungen

  • Fehlermeldung: "Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher."

    • Gehe zu 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.

    • Stelle sicher, dass du die UserForms mit Unload und nicht nur mit Hide schließt. Andernfalls bleiben sie im Speicher und werden weiterhin gezählt.

Alternative Methoden

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.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung der oben genannten Funktionen:

  1. Ü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
  2. 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

Tipps für Profis

  • Verwende 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.
  • Dokumentiere deinen Code gut, um anderen (oder dir selbst in der Zukunft) das Verständnis zu erleichtern.
  • Teste deine Funktionen gründlich, um sicherzustellen, dass alle UserForms korrekt erkannt werden.

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige