[VBA] Verzögerte Ausführung eines Befehls in Access VBA

  • Access

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    [VBA] Verzögerte Ausführung eines Befehls in Access VBA

    Hi Leute

    ich habe eine etwas umfangreichere VBA Anwendung erstellt. Beim Starten wird auch Code ausgeführt, welcher über Erfolg oder Misserfolg seiner Maßnahmen in der Access Statusleiste informiert:

    sowas in der Art:

    Visual Basic-Quellcode

    1. If Erfolgreich Then
    2. varreturn = SysCmd(acSysCmdClearStatus)
    3. varreturn = SysCmd(acSysCmdSetStatus, "Aktualisierung der Master-Tabellen erfolgreich")
    4. Else
    5. varreturn = SysCmd(acSysCmdClearStatus)
    6. varreturn = SysCmd(acSysCmdSetStatus, "Aktualisierung der Master-Tabellen fehlgeschlagen")
    7. End If


    Anschließend wird eine Form angezeigt, so dass Benutzer ihre Arbeit verrichten können.
    Das einzige Problem dabei ist nur, dass der Text in der Statusleiste nicht mehr verschwindet.

    der Befehl:

    Visual Basic-Quellcode

    1. SysCmd(acSysCmdClearStatus)
    würde die Statusleiste wieder leeren. Setze ich diesen Befehl direkt nach dem if/else/end-if-Block verschwindet der gesetzte Text wieder sofort.

    Es ist aber wichtig, dass die Benutzer den Text sehen, für ca 1 Minute. In der selben Zeit müssen sie aber schon arbeiten können. Eine blockierende wait -Funktion hilft also nicht.

    ich bräuchte sowas wie das Starten eines Threads, dort 1 Minute lang warten und anschließend das löschen des Statusleistentexts. Threads gehen leider nicht in VBA :(

    Deswegen die Frage:
    kennt einer von euch einen Befehl, der einen Befehl zeitverzögert ausführt?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chiti“ ()

    Du kannst einen Timer starten, der nach einer Minute zuschlägt.
    Was du dazu brauchst ist:

    Visual Basic-Quellcode

    1. Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    2. Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    Ich habe mir mal für VBA eine Timer-Klasse damit geschrieben.
    Falls du nicht selbst weiter kommst, kann ich mal versuchen, sie auszugraben.

    Ich erinnere mich, dass die AddressOf-Übergabe der Timerprozedur etwas tricky war.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()