2015-11-19 2 views
1

Я пытаюсь придумать способ закрыть документ excel после периода бездействия. Проблема, с которой я сталкиваюсь, заключается в том, что если excel находится в режиме редактирования, макрос не будет выполняться. Это было бы для книги, которая находится на сервере, доступ к которому имеет несколько человек, проблема в том, что некоторые люди оставляют это открытым и забывают, что у них есть это открытое, и никто другой не может редактировать его, поэтому необходимость в этом.Настройка документа Excel для сохранения и закрытия после периода бездействия

Я создать код VBA макрос, который только закрывает документ первенствовать, пока пользователь не находится в режиме редактирования:

Sub OpenUp() 
Dim Start, Finish, TotalTime, TotalTimeInMinutes, TimeInMinutes 
Application.DisplayAlerts = True 
TimeInMinutes = 1 ' sets timer for 1 minutes 
If TimeInMinutes > 1 Then 
TotalTimeInMinutes = (TimeInMinutes * 60) - (1 * 60) 
' times 60 seconds to "minutize"/convert time from seconds to minutes 
    Start = Timer ' Sets the start time. 
    Do While Timer < Start + TotalTimeInMinutes 
     DoEvents ' Yield to other Excel processes. 
    Loop 
    Finish = Timer ' Set end time. 
    TotalTime = Finish - Start ' Calculate total time. 
    Application.DisplayAlerts = False 
    MsgBox "You've had this file open for " & TotalTime/60 & "  minutes. You have 1 minute to save all your files before Excel closes" 
End If 

Start = Timer ' Sets the start time. 
    Do While Timer < Start + (1 * 60) 
     DoEvents ' Yield to other Excel processes. 
    Loop 
    Finish = Timer ' Set end time. 
    TotalTime = Finish - Start ' Calculate total time. 
    Application.DisplayAlerts = False 
    ThisWorkbook.Save 
    Application.Quit 
End Sub 

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

ответ

2

Вам нужно поместить следующий код и сохранить файл в XLSM-формате. Повторное открытие файла для запуска макроса

Поместите код в стандартный модуль

Option Explicit 

Public EndTime 
Sub RunTime() 
    Application.OnTime _ 
      EarliestTime:=EndTime, _ 
      Procedure:="CloseWB", _ 
      Schedule:=True 
End Sub 

Sub CloseWB() 
    Application.DisplayAlerts = False 
    With ThisWorkbook 
     .Save 
     .Close 
    End With 
End Sub 

Разместите код в модуле ThisWorkbook

Option Explicit 

Private Sub Workbook_Open() 
    EndTime = Now + TimeValue("00:00:20") '~~> 20 Seconds 
    RunTime 
End Sub 

Поместите это в каждом листе, чтобы обнаружить какие-либо изменения в рабочий лист

Private Sub Worksheet_Change(ByVal Target As Range) 
    If EndTime Then 
     Application.OnTime _ 
     EarliestTime:=EndTime, _ 
     Procedure:="CloseWB", _ 
     Schedule:=False 
     EndTime = Empty 
    End If 
    EndTime = Now + TimeValue("00:00:20") '~~> 20 Seconds 
    RunTime 
End Sub 

У меня есть ответ с этого сайта http://www.excelforum.com/excel-programming-vba-macros/600241-excel-vba-close-workbook-after-inactivity.html

Смежные вопросы