Wie zeigen Sie den Fortschritt auf der Statusleiste, wenn Sie eine Sequenz von queries in MS-Access
Ich habe ein makro in MS Access 2010 unter Windows 7 läuft eine Abfolge von sehr langsamen Make Table-und Update-Abfragen. Ich will es zu zeigen, auf die Statusleiste, welche Abfrage ausgeführt wird, als die übliche Meldung "Abfrage Ausführen" nicht geben der Abfrage den Namen.
Ich geschrieben habe folgenden VBA:
Function RunQueryAndReportStatusWithMsgBox(QueryName As String)
Dim RetVal As Variant
On Error GoTo ErrHandler
PutStatusBarBack
MsgBox "About to run query"
Application.Echo False, "Executing " & QueryName & " ..."
DoCmd.OpenQuery QueryName, acViewNormal, acEdit
On Error GoTo 0
Exit Function
ErrHandler:
Select Case Err
Case 2501: ' OpenQuery cancelled by the user pressing escape
MsgBox "The OpenQuery action for query " & QueryName & " was cancelled by the user."
Case Else: ' Another error has occurred.
' Display the error number and the error text.
MsgBox "Error # " & Err & " : " & Error(Err)
End Select
' Put status bar back to normal.
PutStatusBarBack
End Function
Function PutStatusBarBack()
Dim RetVal As Variant
On Error GoTo ErrHandler
' Put status bar back to normal.
RetVal = SysCmd(5) ' not sure if I need this.
Application.Echo True, ""
On Error GoTo 0
Exit Function
ErrHandler:
' Display the error number and the error text.
MsgBox "Error # " & Err & " : " & Error(Err)
' Put status bar back to normal.
RetVal = SysCmd(5) ' not sure if I need this.
Application.Echo True, ""
End Function
Ich geschrieben habe, ein makro zu nennen RunQueryAndReportStatusWithMsgBox
mit jeder Abfrage wiederum als argument, und dann rufe ich PutStatusBarBack
am Ende des makro. Ich schalte Warnungen off am Anfang und am Ende. Das funktioniert wirklich gut - nur wie ich es will.
Aber ich will nicht werden, drücken Sie OK auf eine message-box jedes mal, wenn eine Abfrage gestartet wird. Wenn ich kommentiere die MsgBox
Aussage, es funktioniert nicht mehr. Die Ergebnisse sind variabel. Manchmal zeigt es etwas in der status-bar, manchmal nicht. Bei mir lief es gerade jetzt, ich habe gerade den "Bereit" - Meldung überall, aber manchmal habe ich die gewünschte Meldung erscheint für einige, aber nicht alle Abfragen.
Habe ich versucht, mit RefreshDatabaseWindow
statt MsgBox
, aber das macht keinen Unterschied.
InformationsquelleAutor Zajonc | 2015-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gerade jetzt stolperte über dieses, so ist es höchstwahrscheinlich zu wenig, zu spät, aber sicher sein, dass bei jeder iteration, nach dem Sie die Statusleiste aufrufen von DoEvents. Diese sagt, Ihre Verfahren zur Kontrolle wieder an die Anwendung und Windows-für einen zweiten ist, wie es Veränderungen, die status bar text. Es ist auch, wie Sie halten, der Zugang von der Suche auf Windows, wie es ist, nicht mehr reagiert.
InformationsquelleAutor Kenneth Kirby
Danke für die Hilfe, die ich erhielt von HansUp bei der Beantwortung einer ähnlichen Frage (Wie zeigen Sie den Fortschritt auf der Statusleiste beim ausführen von code (nicht Abfragen)) was ich geschrieben danach, kann ich jetzt beantworten Sie diese Frage selbst.
Um den code zu arbeiten, ohne den Aufruf von MsgBox, die Sie benötigen, um zwei Zeilen vor dem Aufruf von Application.Echo:
Diese nun genau das tut, was ich will.
InformationsquelleAutor Zajonc
Entsprechenden @Zajonc ' s Kommentar zu Hauns TM beantworten.
Geschieht es, weil ot diese Zeile:
Bedeutet dies: refresh Statusleiste.
Mehr über die status bar in MS Access: ACC: Wie Ändern Sie den Text der Statusleiste Mit SysCmd()
So, bis die erste Prozedur läuft, nicht aktualisieren-status-bar 😉
Jubel
Maciej
was ich versuche zu sagen ist, zu entfernen PutStatusBarBack aus *RunQueryAndReportStatusWithMsgBox Prozedur 😉
Dank Maciej. Ich nahm mein original-code (siehe Frage oben), und stellen Sie ein Kommentar vor dem ersten Aufruf von PutStatusBarBack (die MsgBox-Aufruf wurde auch kommentiert, wie beschrieben in meiner Frage). Auskommentieren PutStatusBarBack kein Unterschied gemacht. Nichts wird in der Statusleiste angezeigt, außer "Fertig" ist, die meisten der Zeit. Hat es funktioniert für Sie?
Sehr Interessantes Verhalten... Nein, habe ich nicht getestet. Heute ist schon sehr spät (etwa 00:00 UHR). Ich schau deinen code morgen wieder.
InformationsquelleAutor Maciej Los
Ich bin mir nicht sicher, dass dies ist, was du suchst? Vielleicht:
I. e. ändern der Zuordnung in
Application.StatusBar
jedes mal, wenn Sie wollen, es zu ändern.InformationsquelleAutor Hauns TM