VBA Excel 中的代码在通过调度程序触发时不会 运行

VBA code inside Excel doesn't run when triggered via Scheduler

所以在这个 WinServer 2012 R2 64 位上的设置是:

Windows 任务计划程序 -> cscript .vbs 文件 -> 打开 excel 和 运行 主模块中的一个子模块

当我双击 .vbs 文件时,这 运行 在后台很好,但是当我通过任务调度程序触发 .vbs 时,excel 打开,但不加载文件或 运行 子文件(不确定是哪个)。任务 运行 在具有计算机管理权限的域用户下进行。当我尝试点击 .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 设置),但我想在清理之前获取进程 运行ning。


/编辑: 删除

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 来 运行 时,一切正常。

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

C:\Windows\System32\config\systemprofile\Desktop

C:\Windows\SysWOW64\config\systemprofile\Desktop

当这些文件夹不存在时,

Excel 在非交互模式下显然有问题 运行(不知道为什么)。创建它们消除了通过 vbs 打开工作簿时的 1004 错误。