Excel宏导致文件重新打开

时间:2013-03-25 20:55:28

标签: excel excel-vba vba

我有一个奇怪的问题,我把一个宏放在一起工作。

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个单元格的值(远远没有人看到它)和退出而不保存有关。

任何人都可以帮助我吗?感谢

3 个答案:

答案 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()的最后一次预定呼叫。