停止工作簿运行'取消'定时代码

时间:2015-12-22 23:51:34

标签: excel vba excel-vba

修改:我已成功解决了以下问题,方法是使用工作簿A中的Application.EnableEvents = False停止Workbook_Open()代码在工作簿B中运行,但如果有人关心,我仍然会被问题困扰解释一下?

我已经获得了工作簿A打开,编辑,保存和关闭工作簿B.由于多个用户使用了工作簿B,我在打开时切换到只读模式并显示弹出消息。但是,从Workbook A运行代码时,我想停止打开消息框。我在打开时使用Application.OnTime将工作簿B更改为只读,并在10秒内保存后取消待处理代码。

问题:代码在我直接打开Workbook B并在10秒内保存但在将工作簿A中的代码运行到open=>edit=>save=>close Workbook B时工作,即使关闭后,工作簿B也会自动打开。

在尝试使用公共变量和引用VBA项目进行大量研究和反复试验之后,我使用以下资源确定了Application.OnTime

http://www.cpearson.com/excel/OnTime.aspx

以下是我的代码示例。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Call StopTimer

End Sub

Private Sub Workbook_Open()

Call StartTimer

End Sub



Public RunWhen As Double
Public Const cRunWhat = "Change_File_Access"
Public Const cRunIntervalSeconds = 15
Public DatabaseWB As Workbook

Sub StartTimer()

RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=True

End Sub

Sub StopTimer()

MsgBox RunWhen
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
    Schedule:=False

End Sub

Sub Change_File_Access()

If Not Workbooks("WorkbookB.xlsm").ReadOnly Then Workbooks("WorkbookB.xlsm").ChangeFileAccess xlReadOnly
MsgBox "This file is set as Read-Only"

End Sub

1 个答案:

答案 0 :(得分:0)

一些快速测试显示计时器似乎在宏所在的工作簿的上下文中运行 - 而不是您从中执行它的工作簿。因此,您需要执行以下两项操作之一 - 完全退出Excel应用程序(可能不方便),或者从您正在运行代码的工作表中重置计时器。

即,在WorkbookA中:

<ul>
    <li>
        <span class="weekday" id="monday">Mo&nbsp&nbsp</span>8:00 - 12:00, 14:30 - 17:00
    </li>
    <li>
        <span class="weekday" id="tuesday">Di, </span><span class="weekday" id="thursday">Do&nbsp&nbsp</span>8:00 - 12:00, 15:30 - 19:00
    </li>
    <li>
        <span class="weekday" id="wednesday">Mi,</span> <span class="weekday" id="friday">Fr&nbsp&nbsp</span>8:00 - 13:00
    </li>