Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel宏导致文件重新打开_Excel_Vba - Fatal编程技术网

Excel宏导致文件重新打开

Excel宏导致文件重新打开,excel,vba,Excel,Vba,我有一个奇怪的问题,我把宏一起工作 在后台故事中,我基本上设计了一个宏来关闭一个受保护的工作簿,该工作簿在X个时间段后保持打开状态。它是一个共享文档,当人们打开它时,他们经常忘记关闭文档,将其锁定,以便其他人无法使用它 所以我用其他宏的一些片段来创建一个计时器 Sub Start_Timer() 'BASIC UP COUNTER Application.OnTime Now() + TimeValue("00:00:01"), "CheckStatus" End Sub Sub Check

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

在后台故事中,我基本上设计了一个宏来关闭一个受保护的工作簿,该工作簿在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个单元格的值(很远,所以没有人看到)以及不保存而退出有关


有人能帮我吗?谢谢

也许你有打字错误

Dim ws As Worksheet
For Each ts In Worksheets
         ^ws ??
If ws.Range("IV1").Value > 60 Then

您知道您可以为Excel文件提供共享状态,以便多个用户可以同时访问它吗

例如,见:

添加一个全局变量以存储上次计划的OnTime()时间值,并调整计时器子:

Dim lastTimer As Variant

Sub Start_Timer()
    'BASIC UP COUNTER
    lastTimer = Now() + TimeValue("00:00:01")
    Application.OnTime lastTimer, "CheckStatus"
End Sub
然后将其添加到工作簿\u BeforeClose事件:

Application.OnTime lastTimer, "CheckStatus", , False

这将取消Application.OnTime()的上一次计划调用。

始终使用
选项Explicit
以避免qPCR4viroh指示的打字错误。这是我的错。那个打字错误是我把它改成stackoverflow的,所以它更有意义。在实际文件中,它们是相同的。谢谢你!是的,我们对此进行了长时间的讨论,他们想就此罢休。结果是有人打开文件回家过周末。经过多次争论,我列出了所有的选择,这就是他们想要的。我在里面工作,很有趣!那么企业是否有一个Excel作为CRM?哦,祝你快乐和幸福!这是工作的乐趣,他们想倒行逆施,你只要让它发生就行了!有人知道如何检查我关闭文件后发生的情况吗?我尝试使用断点,但在文件关闭后断点会被删除,所以我不知道关闭后会发生什么。谢谢,我会尝试一下!你是对的,这就是问题所在。我做了很多编辑(你给我的代码没有按我希望的方式工作),所以我添加了子函数,但最后,是“Application.OnTime lastTimer”、“CheckStatus”、“False”解决了问题。谢谢太好了,我很高兴能帮上忙!