因此,此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运行它时,一切正常。
答案 0 :(得分:1)
关键是要创建这两个文件夹:
C:\的Windows \ system32 \设置\ systemprofile \桌面
和
C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面
当这些文件夹不存在时,Excel显然在非交互模式下运行时出现问题(不确定原因)。通过vbs打开工作簿时,创建它们可以消除1004错误。