如何从 Windows Server 2016 中的任务计划程序运行 VBA 宏?

如何从 Windows Server 2016 中的任务计划程序运行 VBA 宏?

我有一个 VBA 宏,用于每天提取一些数据。该宏没有任何交互式组件,如消息框、自定义输入或输入框。它不需要任何用户输入,它只从数据库下载一些数据并生成一些 CSV。

我的任务是使用 Windows 的任务计划程序自动提取它。

我尝试创建一个 VBS 应用程序来像这样运行它:

https://stackoverflow.com/questions/58139154/running-an-excel-macro-from-task-scheduler

它不起作用。

我创建了自己的 C# 应用程序来运行它,但没有运行。

在这一点上,我陷入了困境,因为如果我运行它,VBS 应用程序和 C# 应用程序都可以正确运行宏手动

我尝试过以下组合:

  • 仅当用户登录时运行。->成功的
  • 无论用户是否登录,都运行。->失败的
  • 无论用户是否登录,都运行。另外,以最高权限运行。->失败的
  • 无论用户是否登录,都运行。另外,不存储密码...->失败的
  • 无论用户是否登录,都运行。另外,不存储密码...并以最高权限运行 ->失败的
  • 无论用户是否登录,都运行。另外,以最高权限运行并隐藏。->失败的
  • 无论用户是否登录,都运行。另外,不存储密码...和隐藏 ->失败的
  • 无论用户是否登录,都运行。另外,不存储密码...,以最高权限运行并隐藏 ->失败的

另外,我也尝试安排 VBA 宏,但没有任何区别(这是我的第一次尝试)。

此外,正如我在评论中强调的那样,我已经使用我的帐户(管理员帐户)和已经执行某些计划任务的服务帐户进行了测试。

此外,命令如下所示:

  • C:\...\MacroRunner.exe
  • C:\...\MacroRunner.vbs

两者都在 CMD 中运行。此外,我尝试运行它们手动。没想到只是预定的时间就执行了。

知道我可能做错了什么吗?感谢您的时间。

附言:

如果您阅读 StackOverflow 问题,您会发现该人面临同样的问题,但他正在寻找代码。我个人认为这是一个服务器问题,而不是代码问题。

此外,它并不是第一个可以找到类似主题的地方:

https://www.thespreadsheetguru.com/blog/how-to-automatically-run-excel-vba-macros-daily

答案1

我尝试过以下组合:

  • 仅当用户登录时运行。-> 成功。

如果程序仅在用户登录时才工作,则意味着它需要交互式会话。

事实上,它在运行时实际上不显示任何窗口并不重要:如果代码中的某些内容需要交互式会话(即使您不知情)但无法获取,它就会失败。由于 VBA 宏在设计上是在 Office 应用程序内运行的(在正常情况下,该应用程序始终具有 UI),因此这一点也不奇怪;除非原始编码人员采取了额外步骤以允许宏以非交互方式运行,否则这是预期的行为。

如果没有实际的应用程序代码,我们无法为您提供进一步的帮助;我建议您在 StackOverflow 上询问如何确保 VBA 宏可以在没有交互式会话的情况下运行。

答案2

我找到了如何解决我的问题。我在 Super User 中找到了此旧答案斯奎尔曼

https://superuser.com/a/579901

  1. 打开组件服务(开始 -> 运行,输入 dcomcnfg)
  2. 深入到组件服务 -> 计算机 -> 我的电脑,然后单击 DCOM 配置
  3. 右键单击“Microsoft Excel 应用程序”,然后选择“属性”
  4. 在“身份”选项卡中选择“此用户”,输入交互式用户帐户(域或本地)的 ID 和密码,然后单击“确定”

现在,我还需要做什么?

  1. 使用我在步骤4中配置的相同帐户配置计划任务。我尝试使用服务帐户但失败了。
  2. 无论用户是否登录都运行。

此后,我就能正常运行它了。

谢谢@Massimo 的提示。

相关内容