Excel中的VBA代码在通过Scheduler触发时不会运行

时间:2016-04-12 11:09:02

标签: windows excel vba excel-vba scheduled-tasks

因此,此WinServer 2012 R2 64位的设置为:

Windows任务计划程序 - > cscript .vbs文件 - >打开excel并在主模块中运行sub

当我双击.vbs文件时在后台运行正常,但是当我通过任务调度程序触发.vbs时,excel打开,但是没有加载文件或运行sub(不确定哪个)。该任务在具有计算机管理权限的域用户下运行。当我尝试点击.vbs

时,我使用相同的用户

正在运行的代码,按顺序:

任务计划程序启动:

C:\ WINDOWS \ system32 \ cscript.exe" D:\ xyz \ trigger.vbs"

.vbs:

Option Explicit

Dim xlApp, xlBook, xlsheets, xlcopy
Set xlApp = CreateObject("Excel.Application")
xlapp.Interactive = False
xlapp.DisplayAlerts = False
xlapp.AskToUpdateLinks = False
xlapp.AlertBeforeOverwriting = False
Set xlBook = xlApp.Workbooks.Open("D:\xyz\excelfile.xlsm")

On Error Resume Next
Call xlBook.Application.Run("Main.Extrnal_Trigger")

xlbook.Saved = True
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlcopy = Nothing
Set xlApp = Nothing

WScript.Quit(1)

Excel代码:

Sub Extrnal_Trigger()

Application.EnableEvents = False
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False

Call update_button
Call MainProgram
Call ReportSave

End Sub

如何找出.vbs或excel挂起的位置以及原因?另一台机器上的一个非常类似的设置确实运行没有麻烦。它几乎与此处引用的代码完全相同。

我意识到有几种不良做法(比如不清理xlapp设置),但我希望在清理之前让进程运行。

/编辑: 除去

On Error Resume Next
来自.vbs的

不会显示错误。

/ EDIT2: 我试着尽可能地回复。

Option Explicit
Dim fso, f, s, log

Set fso = CreateObject("Scripting.FileSystemObject")

Set log = fso.CreateTextFile("D:\xyz\TESTlog.txt")
log.WriteLine "before fso"

Set f = fso.GetFile("D:\xyz\excel.xlsm")
s = f.Path & "  "
s = s & "Created: " & f.DateCreated & "  "
s = s & "Last Accessed: " & f.DateLastAccessed & "  "
s = s & "Last Modified: " & f.DateLastModified   

log.WriteLine "after fso"
log.writeline "fso content"
log.writeline s

当由任务调度程序通过cscript.exe触发时,此方法有效。 我将尝试修改以记录调用excel文件时发生的事情。

/ EDIT3: 调试显示了这个

Set xlBook = xlApp.Workbooks.Open("D:\xyz\excel.xlsm")
永远不会发生。我输出错误号码,并为此次通话收到错误1004。仍然不确定问题是什么,但至少我现在得到了一个错误号。

/ edit4:

错误1004尝试在计划任务持续存在时运行此错误。当我通过双击.vbs运行它时,一切正常。

1 个答案:

答案 0 :(得分:1)

关键是要创建这两个文件夹

C:\的Windows \ system32 \设置\ systemprofile \桌面

C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面

当这些文件夹不存在时,Excel显然在非交互模式下运行时出现问题(不确定原因)。通过vbs打开工作簿时,创建它们可以消除1004错误。