我有一个奇怪的问题,我把一个宏放在一起工作。
Backstory,我基本上设计了一个宏来关闭受保护的工作簿,在X时间后保持打开状态。它是一个共享文档,当人们打开它时,他们经常忘记关闭文档,将其锁定,以便其他人无法使用它。
所以我用了一些其他的宏来创建一个计时器。
Sub Start_Timer()
'BASIC UP COUNTER
Application.OnTime Now() + TimeValue("00:00:01"), "CheckStatus"
End Sub
Sub CheckStatus()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Range("IV1").Value > 60 Then
'IF IDLE LONGER THAN VALUE ABOVE, RUN THE FOLLOWING
Application.DisplayAlerts = False 'WORKS TO DISABLE ALERT PROMPT
ThisWorkbook.Close (False) 'CLOSE FILE WITHOUT SAVING
Application.Quit
Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS
End Sub
Else
'ADD 1 TO COUNTER
ws.Range("IV1").Value = ws.Range("IV1").Value + 1
End If
Next
Start_Timer
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet
MsgBox ("This Worksheet has a 15 min timer")
Start_Timer
For Each ws In Worksheets
'Columns("IV:IV").Hidden = True
ws.Range("IV1").Value = 1
Next
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ws As Worksheet
For Each ws In Worksheets
ts.Range("IV1").Value = 1
Next
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False 'WORKS TO DISABLE ALERT PROMPT
ThisWorkbook.Close (False) 'CLOSE FILE WITHOUT SAVING
Application.Quit
Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS
End Sub
大多数情况下都有效。但是,我宁愿消除像“Application.Quit”这样的东西。我遇到的问题是,当我删除该行时,工作簿会在手动关闭后立即重新打开,或者尝试手动退出Excel。
我认为这可能与不断更改1个单元格的值(远远没有人看到它)和退出而不保存有关。
任何人都可以帮助我吗?感谢
答案 0 :(得分:1)
也许你有拼写错误?:
Dim ws As Worksheet
For Each ts In Worksheets
^ws ??
If ws.Range("IV1").Value > 60 Then
答案 1 :(得分:0)
您知道您可以为Excel文件提供共享状态,以便多个用户可以同时访问它吗?
参见例如: http://office.microsoft.com/en-in/excel-help/share-a-workbook-HP005202595.aspx
答案 2 :(得分:0)
添加一个全局变量来存储上次调度的OnTime()时间值并调整您的计时器子:
Dim lastTimer As Variant
Sub Start_Timer()
'BASIC UP COUNTER
lastTimer = Now() + TimeValue("00:00:01")
Application.OnTime lastTimer, "CheckStatus"
End Sub
然后将其添加到Workbook_BeforeClose事件:
Application.OnTime lastTimer, "CheckStatus", , False
这将取消Application.OnTime()的最后一次预定呼叫。