невозможно выбрать другую книгу, когда открыта книга с включенным макросом
Вопрос
У меня есть книга с поддержкой макросов, в которой используется код для установки таймера - это общая книга, и часто люди находятся в книге и покидают свой стол и т. д.Он настроен на сохранение и закрытие через 30 минут бездействия.Кажется, эта функция работает нормально, но проблема, с которой я сталкиваюсь, заключается в том, что, когда у меня открыты другие книги, я не могу выбрать их ни щелчком по плитке (Windows 7), ни нажатием alt+tab, единственный способ перемещения — ctrl + сдвиг.Если бы книгу использовал только я, это не было бы проблемой - кто-нибудь знает, почему это происходит?Код размещен ниже:
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
Решение 2
Thank you again for the reply, I couldn't quite figure you where I was supposed to put what as I am new to this as I had said. I did find a solution, or so it seems:
In the "This Workbook" module I put:
Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
ResetTimer
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ResetTimer
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ResetTimer
End Sub
and in the "user" module (i right click and add module), I used:
Public CloseDownTime As Variant
Public Sub ResetTimer()
On Error Resume Next
If Not IsEmpty(CloseDownTime) Then Application.OnTime EarliestTime:=CloseDownTime, Procedure:="CloseDownFile", Schedule:=False
CloseDownTime = Now + TimeValue("00:00:30") ' hh:mm:ss
Application.OnTime CloseDownTime, "CloseDownFile"
End Sub
Public Sub CloseDownFile()
On Error Resume Next
Application.StatusBar = "Inactive File Closed: " & ThisWorkbook.Name
ThisWorkbook.Close SaveChanges:=True
End Sub
.
Половина моей битвы.Я ценю, что вы нашли время, чтобы помочь и получить меня на правильном пути!
Другие советы
Начнем с того, что я не совсем понимаю, почему вы наблюдаете такое поведение, но, пожалуйста, продолжайте читать.я подозревать это как-то связано с твоим занят-подожди петля (та, у которой DoEvents
), но это всего лишь догадка.У кого-то другого может быть (лучшее) объяснение.
В любом случае, возможно, используя Application.OnTime
это лучший подход.Вы можете запланировать выполнение операции на определенное время или интервал, а также есть возможность отменить и заменить ранее запланированную операцию.Вам понадобится это средство в Workbook_SheetChange
обработчик события.
Короче говоря, вы можете сделать следующее:
- Добавьте новую процедуру для сохранения и выхода из книги, назовем ее:
SaveWorkbookAndExit
.Это будет вызваноOnTime
позже. Замените содержимое вашего
Workbook_SheetChange
обработчик событий следующим образом:Application.OnTime Now + TimeValue("00:30:00"), _ "SaveWorkbookAndExit", _ Schedule:=False
Это в основном расписание рутины
SaveWorkbookAndExit
перезвонят через 30 минут.Обратите внимание наSchedule:=False
-- это означает, что ранее заданная процедура должна быть очищена/отменена, что очень важно.- Также добавьте тот же код, что и выше, в свой
Workbook_Open
обработчик события. Однако, в отличие от вышеизложенного, обратите внимание, что вам следует установитьSchedule:=True
здесь!
Вот и все.При открытии книги появляется новый SaveWorkbookAndExit
операция назначена.Затем каждый раз, когда вы заходите в Workbook_SheetChange
, ранее запланированная операция будет отменена и вместо нее будет назначена новая.
Я ничего из этого не проверял, но надеюсь, вы поняли идею.Пожалуйста, дайте мне знать, если вам нужно, чтобы я объяснил что-то дальше.