1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)

Problemstellung:

Eine VBA-Routine soll solange unterbrochen werden oder eine Pause machen,
bis ein zuvor geöffnetes Formular oder ein Bericht wieder geschlossen ist.
Oder ist ein Formular oder Bericht geöffnet und wenn Ja in welcher Ansicht?

Lösung:

Du kannst auf ein wenig beachtetes Feature der "SysCmd()"-Funktion zurückgreifen:
Über die Unter-Funktion "GetObjectState()" von "SysCmd()" lässt sich recht einfach feststellen,
ob ein Formular oder ein Bericht geöffnet ist.
Solange das der Fall ist, kann in einer entsprechenden Schleife gewartet werden.

Public Enum Objekte
    Formular = 2
    Bericht = 3
End Enum
Public Sub WaitObject(sObjectName As String, _
    Optional eTyp As Objekte = Formular)
    While SysCmd(acSysCmdGetObjectState, eTyp, sObjectName)
        DoEvents
    Wend
End Sub

Aufruf z.B.:
Es wird ein Form "Formular1" aufgrufen.
Wird dieses geschlossen erscheint die MsgBox.

DoCmd.OpenForm "Formular1"
WaitObject "Formular1", Formular
MsgBox "Formular wurde geschlossen!" 

Status des Formulars oder Berichts: 

Function IsObjectOpenTyp(sObjectName As String, _
    Optional eTyp As Objekte = Formular) As String
    Dim sState As String, nState As Long
    If SysCmd(acSysCmdGetObjectState, eTyp, sObjectName) <> 0 Then
        Select Case eTyp
            Case Formular
                nState = Forms(sObjectName).CurrentView
            Case Bericht
                nState = Reports(sObjectName).CurrentView
        End Select
        If nState = 0 Then
            sState = "Enwurfsansicht"
        ElseIf nState = 1 Then
            sState = "Formularansicht"
        ElseIf nState = 2 Then
            sState = "Datenblattansicht"
        ElseIf nState = 3 Then
            sState = "Pivot Tabelle"
        ElseIf nState = 4 Then
            sState = "Pivot Chart"
        ElseIf nState = 5 Then
            sState = "Vorschau"
        End If
        IsObjectOpenTyp = sObjectName & " ist geöffnet in der Ansicht: " & sState
    Else
        IsObjectOpenTyp = sObjectName & " ist geschlossen"
    End If
End Function 

Mit dieser Funktion kann geprüft werden ob ein Formular geöffnet ist und in welcher Ansicht.

Aufruf z.B.:

MsgBox IsObjectOpenTyp("Formular15", Formular)

Ergebnis:


Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

Neueste Artikel

Problemstellung: Ab MS-Office 2010 gibt es eine 32bit und eine 64bit Variante.Übernimmt man nun eine Datenbank nach 64bit und diese enthält API-Declare Anweisungenerhlt min in der Regel diese...
1.png2.png0.png4.png4.png6.png7.png
Heute104
Gestern127
Diese Woche512
Dieser Monat1891
Total1204467

  • IP: 54.80.83.123
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

20. September 2018

Letzte Kommentare

  • Trusted Locations Manager

    Tommy Admin 13.07.2018 13:06
    RE: Trusted Locations Manager
    Hallo Matthias, aus Ermangelung einer 64bit Version kann ich das leider nicht prüfen. Tut mir leid. Gruss ...

    Weiterlesen...

     
  • Trusted Locations Manager

    Matthias 13.07.2018 06:48
    Funktioniert nicht
    Habe gerade den TL-Manager installiert. Nach dem Start sagt er mir, dass es kein Office erkennen ...

    Weiterlesen...