显示由 windows 调度程序启动的隐藏 Excel 实例

Show hidden Excel instance that is started by windows scheduler

我有一些 windows 任务每天安排在特定时间。这些任务具有打开 excel 工作簿的操作,其中包括一些 vba(创建报告并通过邮件发送)运行 在 workbook_open 上完成并自动关闭代码完成了。由于一些内部问题,我必须 运行 带有选项“运行 用户是否登录”的那些任务。因此 excel 实例将在后台 运行。如果我使用同一用户登录,则看不到 excel。仅作为详细过程。我知道,这就是任务选项“运行 用户是否登录”的意义。如果 excel 工具工作正常,这就没有问题。但有时 运行 会出现错误,导致该工具永远无法完成。因为 excel 是隐藏的,所以我无法查看调试器来识别问题,因为 windows 任务选项...

有谁知道是否可以通过使用为预定 windows 设置的相同用户登录来打开 运行 正在出错的隐藏 excel 工作簿任务?

我用一些打开 excel 的隐藏实例的代码进行了尝试,但那没有用。我还搜索了通过 PID 打开隐藏的 excel 工作簿的脚本。但是我一无所获...

PS: 对不起我的英语,但我希望它能被理解。

更新 2020-07-08: 澄清一下 - 由于 windows 更新过程每周都会重新启动 windows,我必须使用上述选项设置作业,以确保它们得到执行。 如果我做对了,如果由 windows 调度程序在后台启动,则无法使这些 excel 文件可见,即使我在作业由调度程序... 解决方案:我将切换到 windows 服务器安装,我可以自己控制更新过程。所以我可以永久登录并且能够 运行 没有调度程序的“背景”选项的作业。

对您问题的简短回答是:否

不幸的是,自从 Windows Vista 以来,当任务计划程序在启用选项 Run whether user is logged on or not 的情况下启动任务时,该进程将作为后台进程启动,显然没有办法使它与用户互动*。该主题的 MSDN article 指出:

If this radio button is selected, tasks will not run interactively.

据我了解,这似乎表明 Microsoft 对 运行 用户是否登录的任务施加了限制,因此它们无法进行交互(包括对用户)。

另请参阅有关该主题的 this question

然而...

在您的问题中,您说“由于一些内部问题,我必须 运行 使用选项 Run whether user is logged on or not 执行那些任务”。我只是想知道是否真的有必要。

有一个相对普遍的误解(或者至少我最初是这么想的),如果你 select Run only when the user is logged on,任务不会 运行 如果你在锁定屏幕。这不是真的!

只要用户在计算机启动后至少登录过一次,任务就会 运行。这有点误导,因为如果您必须输入密码,您通常会认为没有登录,但由于用户 account/desktop 已经加载,任务计划程序可以像用户登录一样运行。


* 旁注:

某些标记为后台进程的 Excel 进程在使用 VBA 创建时可以显示(来自可见的 Excel 应用程序)。您可以将以下行放入 .vbs 文件和 运行 脚本中。
Set oXLApp = GetObject(,"Excel.Application")
oXLApp.Visible = True

但我试过了,它似乎不适用于从启用了 Run whether user is logged on or not 的任务计划程序创建的 Excel window。在这种情况下,任务计划程序似乎对 Excel window.

施加了一些额外的限制

已经记录了很多方法(尽管不是这个问题 IMO 的重复)。例如:

How to use FindWindow to find a visible or invisible window with a partial name in VBA

VBA script to close every instance of Excel except itself

简而言之,要么使用 Windows 方法 FindWindow() 找到 window 的句柄,要么使用 VBA 方法搜索 Excel 对象GetObject()