从任务计划程序启动 excel 正在工作,现在失败

Posted

技术标签:

【中文标题】从任务计划程序启动 excel 正在工作,现在失败【英文标题】:Start excel from Task Scheduler was working, now fails 【发布时间】:2013-02-24 16:31:54 【问题描述】:

我已经使用任务计划程序以及 cscript 和 vbscript 运行我的 excel 2000 vba 程序大约一年了。几天前它停止了工作。我可以手动运行程序。每当任务计划程序启动它时,黑色窗口会显示大约 1-2 秒,然后关闭。

我试过注释掉错误处理,但我总是得到相同的结果。 我试过显示MsgBoxes,但结果还是一样。

我在您的论坛上找到了一种更简单的方法,并且我尝试了相同的结果。

那么我需要做些什么来调试呢?

这是我从这个论坛尝试过的代码:

Option Explicit

Dim xlApp, xlBook

Set xlApp = CreateObject("Excel.Application")
'~~> Change Path here
Set xlBook = xlApp.Workbooks.Open("C:\My Documents\___Stocksfilter.xls", 0, True)
xlApp.Run "A_Pick"
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

WScript.Echo "Finished."
WScript.Quit

这是我一直在使用的代码:

'Script to start my filter.xls program with named macro
'MsgBox "In RunExcel"

' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application") 

' Disable Excel UI elements
myExcelWorker.DisplayAlerts = False
myExcelWorker.AskToUpdateLinks = False
myExcelWorker.AlertBeforeOverwriting = False
myExcelWorker.FeatureInstall = msoFeatureInstallNone

' Open the Workbook 
Dim oWorkBook
Dim strWorkerWB
strWorkerWB = "C:\My Documents\___Stocks\filter.xls"

'MsgBox "Opening filter"

on error resume next 
Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB)
if err.number <> 0 Then
    ' Error occurred - just close it down.
    MsgBox "open Error occurred"
End If
err.clear
on error goto 0 

'MsgBox "Running macro"

Dim strMacroName
strMacroName = "A_Pick"
on error resume next 
' Run the macro
myExcelWorker.Run strMacroName
if err.number <> 0 Then
    ' Error occurred - just close it down.
    MsgBox "run macro Error occurred"
End If
err.clear
on error goto 0 

' Clean up and shut down
Set oWorkBook = Nothing
myExcelWorker.Quit
Set myExcelWorker = Nothing
Set WshShell = Nothing

【问题讨论】:

欢迎来到Stack Overflow。在写得很好的第一个问题上+1。您是在 XP 或 Win7(不是服务器)上运行它吗?当你在没有myExcelWorker.DisplayAlerts = False 的情况下调试它时,excel 是否会提示发生了什么? 它在我的旧 Windows 98 SE 计算机上运行。它根本没有显示任何错误信息。但是黑色窗口只是闪烁,我不知道如何捕获错误。我将 DisplayAlerts=False 与其他 UI 行一起注释掉,结果始终完全相同。 在Excel宏的vb脚本中是否失败?您验证路径是否正确? 嗯,路径是正确的。什么都没有改变,比如我没有移动我的文件。我想,它没有进入 Excel,但我不知道如何确定。 我照你说的做了。它到了这一行:myExcelWorker Run strMacroName。我相信它开始运行我的程序。一旦启动,我的程序将运行几个小时。所以我在vbs中没有看到任何错误。我想做的另一件事是我为 cscript 和我的 RunExcel.vbs 发出了运行命令。然后黑色窗口闪烁约 1 秒。 【参考方案1】:

我将在这里大胆猜测。

它在我运行 cscript 时有效,但在任务运行时无效”让我认为这是一个权限问题。当您设置 Windows 计划任务时,您应该能够将其设置为以特定用户身份运行(并且还可以设置在用户未登录时是否运行)。我不确定 Win 98,但你能找出任务属性的含义吗?当您自己运行代码时,会使用您的 权限,并且计划任务可能正在使用无权运行它的用户。

如果您不进行任何更改,怎么会发生这种情况?我唯一能想到的是:

    计划任务使用的用户已不存在或权限已更改 用户的密码过期日期最近已过 如果计划任务使用您的用户名,您是否将密码保存在任务属性中,然后最近更改了密码,但没有更新计划任务的密码?

另外,一些防病毒产品会停止使用一些 vbscripts。您是否可能在它停止工作之前安装了任何新东西?

检查错误可能来自哪里(希望这可行,因为我对 Win98 机器不是很熟悉):

    找出哪个用户被设置为运行计划任务 以其他用户身份启动命令提示符(我认为它是 Shift+右键单击 --> 运行方式... [注意,我不了解 Windows 98,所以我祈祷你能做到这一点] ) 从命令提示符运行 cscript:C:\&gt;cscript &lt;dir&gt;\myscript.extension \I(注意,\I 是交互模式,应该会显示错误 (see here for more info)

我真的希望这会有所帮助。我会把它放在评论中,但它的文字太多了。

【讨论】:

感谢您的建议,joseph4tw。我会调查并告诉你。但是 Win 98 没有用户。此外,TaskScheduler 会启动它。我相信 cscript 没有找到我的 RunExcel.vbs 文件。就像我说的,既然我已经做到了这一步,我会做一些进一步的测试。 @RoseAb 我明白了。您是否尝试过只是重新创建任务而不是试图了解它为什么不起作用? 这是我发现的。我运行 wscript 而不是 cscript,这向我显示了错误。错误是“找不到脚本引擎 VBScript ...”我正在互联网上寻找解决方案。有人说运行“regsvr32 VBScript”并给出错误-RegSvr32 LoadLibrary(VBScript) 失败。 GetgLastError 返回 0x00000485。【参考方案2】:

解决了!首先我做了一个运行命令并使用了 wscript。也可以按照 joseph4tw 的建议使用 cscript /I,但我不知道。

这向我显示了它找不到 VBScript 引擎的错误。一世 在互联网上查看,vbscript.dll 应该在 Windows/系统文件中 对于我的 98 电脑。它不在那里。我找到了网站 www.dll-files.com 并下载了该文件。然后我重新启动。然后我执行了一个运行命令来安装它,如下所示:运行 regsvr32 vbscript.dll。 它给出了一条成功消息,现在它可以工作了。

我相信这是由恶意软件引起的。我无法从我的 98 计算机上删除恶意软件,因为我无法运行任何较新的防病毒软件。

由于我的新 XP 计算机,我正在制作磁盘映像并使用 linux 恢复 CD。那个linux,我想会在98上运行,我希望我可以运行杀毒软件来清理那台电脑。

感谢大家的帮助,因为它让我找到了解决方案。

【讨论】:

很高兴能帮上忙! +1 发布详细解决方案【参考方案3】:

我刚遇到同样的问题。

我制作了一个 .bat 文件,我在其中调用了 .exe 文件。

call filelocation/application.exe

最后,我从任务调度程序操作中调用了 .bat 文件。

效果很好。

【讨论】:

以上是关于从任务计划程序启动 excel 正在工作,现在失败的主要内容,如果未能解决你的问题,请参考以下文章

Windows 任务计划程序错误 101 启动失败代码 2147943785 [关闭]

任务计划程序未在应用程序中启动Excel

从 SQL 代理运行时 SSIS 脚本任务失败

linux计划任务失败如何排查原因

Kubernetes中的Job(工作计划)&amp;amp;CronJob(定时工作计划)Demo+实战

.Net Core 上的计划任务