Excel VBA MsgBox 在定时器后自动回答是
Excel VBA MsgBox auto answer Yes after timer
我想安排一个任务来打开一个 excel 工作簿,运行 一个脚本,然后在每天的指定时间(晚上)关闭该工作簿。我已经在 Task Scheduler 中安排了任务,我知道我可以在打开工作簿时将代码设置为 auto-运行,但我不希望每次我都将代码设置为 运行打开工作簿。有没有办法在代码的开头插入一个msgbox,这样如果在60秒内没有对msgbox的响应,它会自动运行代码。这是我的设想,但无法弄清楚如何格式化它的 "Case Timeout" 部分:
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
只需将其作为常规子程序并编写您安排的批处理脚本即可。
我以前一直这样做,但找不到我的旧脚本。找到了这个,我知道它和我以前的很相似。
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 并将其安排到 运行 而不是工作簿。这样您就可以随时打开和编辑脚本,而无需自动 运行ning.
您可以尝试启动画面方法。
创建一个新作品sheet,说StartUp
并让它看起来像这样:
在这张图片中,我隐藏了网格线等,更改了背景和字体,然后包含两个链接到子项的矩形。
潜艇的工作方式:
1) 在标准代码模块中(其中包含您想要(有时)运行 的 Report
子),我在模块顶部声明了一个变量:
Public TimeOut As Boolean
2) 在我启动的代码模块中 sheet 我有这两个 subs(链接到相应的形状):
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
事件,显示初始屏幕。这个 Workbook_Open
子然后进入一个 60 秒的循环,监视变量 TimeOut
。如果它变为 false(通过按下闪屏按钮)——子结束(形状的事件处理程序隐藏闪屏)。否则 60 秒后启动画面自动隐藏,Report
子自动 运行.
最后备注:需要 DoEvents
来监视 TimeOut
变量并允许其他事件处理程序触发,因此您不会想简单地休眠 60 秒。尽管如此,您仍然可以通过在 Do-While
循环的中间引入 1 秒的睡眠来使用 @teepee 的优秀建议。每秒检查一次 TimeOut
可能就足够了。
我想安排一个任务来打开一个 excel 工作簿,运行 一个脚本,然后在每天的指定时间(晚上)关闭该工作簿。我已经在 Task Scheduler 中安排了任务,我知道我可以在打开工作簿时将代码设置为 auto-运行,但我不希望每次我都将代码设置为 运行打开工作簿。有没有办法在代码的开头插入一个msgbox,这样如果在60秒内没有对msgbox的响应,它会自动运行代码。这是我的设想,但无法弄清楚如何格式化它的 "Case Timeout" 部分:
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
只需将其作为常规子程序并编写您安排的批处理脚本即可。 我以前一直这样做,但找不到我的旧脚本。找到了这个,我知道它和我以前的很相似。
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 并将其安排到 运行 而不是工作簿。这样您就可以随时打开和编辑脚本,而无需自动 运行ning.
您可以尝试启动画面方法。
创建一个新作品sheet,说StartUp
并让它看起来像这样:
在这张图片中,我隐藏了网格线等,更改了背景和字体,然后包含两个链接到子项的矩形。
潜艇的工作方式:
1) 在标准代码模块中(其中包含您想要(有时)运行 的 Report
子),我在模块顶部声明了一个变量:
Public TimeOut As Boolean
2) 在我启动的代码模块中 sheet 我有这两个 subs(链接到相应的形状):
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
事件,显示初始屏幕。这个 Workbook_Open
子然后进入一个 60 秒的循环,监视变量 TimeOut
。如果它变为 false(通过按下闪屏按钮)——子结束(形状的事件处理程序隐藏闪屏)。否则 60 秒后启动画面自动隐藏,Report
子自动 运行.
最后备注:需要 DoEvents
来监视 TimeOut
变量并允许其他事件处理程序触发,因此您不会想简单地休眠 60 秒。尽管如此,您仍然可以通过在 Do-While
循环的中间引入 1 秒的睡眠来使用 @teepee 的优秀建议。每秒检查一次 TimeOut
可能就足够了。