Problemstellung:
Für 32Bit und 64Bit Office Versionen
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
Weiterlesen...