Вопрос:
Я не уверен, что это возможно. Я ничего не нашел, когда искал ответ в Интернете. У меня есть макрос, где он будет закрываться через 5 минут бездействия. Работает как прелесть, за исключением случаев, когда пользователь редактирует ячейку, таймер не запускается, поэтому из-за этого она не закрывается. Есть ли способ, чтобы excel имел таймер, как долго пользователь находится в режиме редактирования, тогда он выведет их из него. После выхода из режима редактирования макрос начнет 5 минут бездействия. Любая помощь очень ценится!
ЗДЕСЬ МОДУЛЬ РАБОЧЕЙ КНИГИ
Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Saved = True End Sub Private Sub Workbook_Open() start_Countdown End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) stop_Countdown start_Countdown End Sub
ЗДЕСЬ – СТАНДАРТНЫЙ МОДУЛЬ
Option Explicit Public Close_Time As Date Sub start_Countdown() Close_Time = Now() + TimeValue(«00:05:00») Application.OnTime Close_Time, «close_WB» End Sub Sub stop_Countdown() Application.OnTime Close_Time, «close_WB», , False End Sub Sub close_wb() ThisWorkbook.Close True End Sub Ответ №1
Для этого вам понадобится какой-то монитор процесса/терминатор задач вне VBA, потому что VBA “заблокирован”, когда пользователь находится в режиме ввода.
Ответ №2
Вы можете попробовать следующее:
Public Declare Function SetTimer Lib «user32» ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Public Declare Function KillTimer Lib «user32» ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long) As Long Public TimerID As Long Public TimerSeconds As Single Sub StartTimer() TimerSeconds = 5*60 ‘ how often to «pop» the timer (5 minutes in the example). TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc) End Sub Sub EndTimer() On Error Resume Next KillTimer 0&, TimerID End Sub Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _ ByVal nIDEvent As Long, ByVal dwTimer As Long) ‘ call here whatever you want to call End Sub
Это всегда работает даже в режиме редактирования, не забудьте вызвать StartTimer для запуска и EndTimer перед тем, как выйти…
Ответ №3
Таким образом, Keypress поможет выйти из клетки, когда время истекло? Введите, чтобы подтвердить изменения, Esc, чтобы отменить изменения? Можно вызвать диалоговое окно, чтобы пользователь мог определить, какой из них или выбрать продолжение редактирования.