Beim Öffnen einer makroaktivierten Arbeitsmappe kann keine andere Arbeitsmappe ausgewählt werden

StackOverflow https://stackoverflow.com//questions/25071193

  •  26-12-2019
  •  | 
  •  

Frage

Ich habe eine makrofähige Arbeitsmappe, die Code verwendet, um einen Timer einzustellen. Dies ist ein gemeinsam genutztes Buch, und oft sind Leute in dem Buch und verlassen ihren Schreibtisch usw.Es ist so eingestellt, dass es nach 30 Minuten Inaktivität speichert und schließt.Diese Funktion scheint gut zu funktionieren, aber das Problem, auf das ich stoße, ist, dass ich, wenn ich andere Arbeitsmappen geöffnet habe, diese nicht auswählen kann, weder durch Klicken auf die Kachel (Windows 7) noch durch Alt+Tab. Die einzige Möglichkeit, mich zu bewegen, ist Strg +Verschiebung.Wenn nur ich die Arbeitsmappe verwenden würde, wäre das kein Problem. Weiß jemand, warum das passiert?Code unten gepostet:

Private Sub Workbook_Open()
StartTimer
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
StartTimer
End Sub


Const idleTime = 1800 'seconds
Dim Start
Sub StartTimer()
Start = Timer
Do While Timer < Start + idleTime
DoEvents
Loop
Application.DisplayAlerts = False
ActiveWorkbook.Close True
Application.DisplayAlerts = True
End Sub
War es hilfreich?

Lösung 2

generasacodicetagpre.

Die Hälfte meines Kampfes erkennt, was Menschen mit "diesem" oder "dieses" Modul bedeuten - dieser Code könnte ein bisschen übertrieben sein, aber es scheint zu funktionieren.Ich freue mich, dass Sie sich die Zeit nehmen, um zu helfen, um mich auf den richtigen Weg zu bringen!

Andere Tipps

Zunächst einmal bin ich mir nicht ganz sicher, warum bei Ihnen dieses Verhalten auftritt, aber lesen Sie bitte weiter.ICH verdächtig es hat etwas mit dir zu tun beschäftigt-warten Schleife (die mit der DoEvents), aber das ist nur eine Ahnung.Jemand anderes könnte eine (bessere) Erklärung haben.

Wie auch immer, vielleicht mit Application.OnTime ist ein besserer Ansatz.Sie können einen Vorgang so planen, dass er zu einem bestimmten Zeitpunkt oder in einem bestimmten Intervall ausgeführt wird, und es besteht die Möglichkeit, einen zuvor geplanten Vorgang abzubrechen und zu ersetzen.Sie benötigen diese Einrichtung in der Workbook_SheetChange Ereignishandler.

Kurz gesagt, Sie können Folgendes tun:

  1. Fügen Sie eine neue Routine zum Speichern und Beenden der Arbeitsmappe hinzu. Nennen wir sie: SaveWorkbookAndExit.Dies wird aufgerufen von OnTime später.
  2. Ersetzen Sie den Inhalt Ihres Workbook_SheetChange Event-Handler wie folgt:

    Application.OnTime Now + TimeValue("00:30:00"), _
                       "SaveWorkbookAndExit", _
                       Schedule:=False
    

    Dies plant im Grunde die Routine SaveWorkbookAndExit in 30 Minuten angerufen werden.Beachten Sie die Schedule:=False – Es bedeutet, dass ein zuvor festgelegter Vorgang gelöscht/abgebrochen werden sollte, was sehr wichtig ist.

  3. Fügen Sie außerdem den gleichen Code wie oben zu Ihrem hinzu Workbook_Open Ereignishandler. Beachten Sie jedoch, dass Sie im Gegensatz zu oben Folgendes festlegen sollten Schedule:=True hier drin!

Und das ist es.Wenn die Arbeitsmappe geöffnet wird, erscheint eine neue SaveWorkbookAndExit Operation ist geplant.Dann, jedes Mal, wenn Sie hineingehen Workbook_SheetChange, wird der zuvor geplante Vorgang abgesagt und an seiner Stelle ein neuer geplant.

Ich habe nichts davon getestet, aber ich hoffe, dass Sie auf die Idee kommen.Bitte lassen Sie mich wissen, wenn Sie eine weitere Erklärung benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top