Excel VBA MsgBox自动回答是定时器后

我想安排一个任务,打开一个Excel工作簿,运行一个脚本,并在指定的时间每天(过夜)closures工作簿。 我已经安排在任务计划程序中的任务,并且我知道我可以将代码设置为在打开工作簿时自动运行,但是我不希望代码在运行每次打开工作簿时运行。 有没有办法在代码的开头插入一个msgbox,以便如果在60秒内没有msgbox的响应,它会自动运行代码。 这是我所设想的,但不知道如何格式化它的“案例超时”部分:

Sub Auto_Run() MsgBox "Would you like to run reports now?", vbYesNo Case vbYes 'Insert code here Case Timeout 'paste the same code as for vbYes Case vbNo End Sub 

只要把它作为一个常规的子,并写一个你安排的批处理脚本。 我曾经一直这样做,但无法find我的旧脚本。 发现这一点,我知道它是类似于我的旧的。

 Dim xlApp Dim xlWkb Set xlApp = CreateObject("excel.application") Set xlWkb = xlApp.Workbooks.Open("PATH TO YOUR FILE") xlApp.Visible = True xlWkb.RunAutoMacros 1 'enables macros to be run on open xlApp.Run ("YOUR PROCEDURE") xlApp.Workbooks("YOUR WORKBOOK NAME").Save 'Save the workbook xlApp.Quit 'quits excel 

保存为.vbs并安排它运行而不是工作簿。 这样,您可以随时打开并编辑脚本,而无需自动运行。

你可以尝试一个启animation面的方法。

创build一个新的工作表,说StartUp并使其看起来像这样:

在这里输入图像说明

在这个图片中我隐藏了网格线等,改变了背景和字体,然后包含了两个链接到subs的矩形。

子工作的方式:

1)在一个标准的代码模块(其中包含你想(有时)运行)的Report子模块,我有一个variables声明在模块的顶部:

 Public TimeOut As Boolean 

2)在我的启动工作表的代码模块,我有这两个潜艇(链接到相应的形状):

 Sub RunReport() Sheets("StartUp").Visible = xlSheetHidden TimeOut = False Report 'sub to launch End Sub Sub UseWorkbook() Sheets("StartUp").Visible = xlSheetHidden TimeOut = False End Sub 

3)在ThisWorkbook的模块中我有:

 Private Sub Workbook_Open() Dim start As Double TimeOut = True Sheets("StartUp").Visible = xlSheetVisible Sheets("StartUp").Activate start = Timer Do While Timer < start + 60 DoEvents If TimeOut = False Then Exit Sub Loop Sheets("StartUp").Visible = xlSheetHidden Report End Sub 

打开工作簿时,将Open事件,显示启animation面。 这个Workbook_Open子然后进入一个60秒的循环,监视variablesTimeOut 。 如果它变成假的(通过按下飞溅屏幕button) – 子结束(用隐藏启动屏幕的形状的事件处理程序)。 否则,在60秒之后,启animation面将自动隐藏,并自动运行Report子项。

最后说明:需要DoEvents来监视TimeOutvariables,并允许其他事件处理程序触发,因此您不需要简单地hibernate60秒。 尽pipe如此,你仍然可以使用@teepee的优秀build议,在Do-While循环中引入1秒钟的睡眠。 每秒检查一次TimeOut可能就足够了。