невозможно выбрать другую книгу, когда открыта книга с включенным макросом

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

  •  26-12-2019
  •  | 
  •  

Вопрос

У меня есть книга с поддержкой макросов, в которой используется код для установки таймера - это общая книга, и часто люди находятся в книге и покидают свой стол и т. д.Он настроен на сохранение и закрытие через 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 обработчик события.

Короче говоря, вы можете сделать следующее:

  1. Добавьте новую процедуру для сохранения и выхода из книги, назовем ее: SaveWorkbookAndExit.Это будет вызвано OnTime позже.
  2. Замените содержимое вашего Workbook_SheetChange обработчик событий следующим образом:

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

    Это в основном расписание рутины SaveWorkbookAndExit перезвонят через 30 минут.Обратите внимание на Schedule:=False -- это означает, что ранее заданная процедура должна быть очищена/отменена, что очень важно.

  3. Также добавьте тот же код, что и выше, в свой Workbook_Open обработчик события. Однако, в отличие от вышеизложенного, обратите внимание, что вам следует установить Schedule:=True здесь!

Вот и все.При открытии книги появляется новый SaveWorkbookAndExit операция назначена.Затем каждый раз, когда вы заходите в Workbook_SheetChange, ранее запланированная операция будет отменена и вместо нее будет назначена новая.

Я ничего из этого не проверял, но надеюсь, вы поняли идею.Пожалуйста, дайте мне знать, если вам нужно, чтобы я объяснил что-то дальше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top