我有一个 VBA 宏,用于每天提取一些数据。宏没有任何交互式组件,例如消息框、自定义输入或输入框。它不需要任何用户输入,它只从数据库下载一些数据并生成一些 CSV。
我的任务是使用 Windows 的任务计划程序自动提取它。
我尝试创建一个 VBS 应用程序来运行它,如下所示:
https://stackoverflow.com/questions/58139154/running-an-excel-macro-from-task-scheduler
它没有用。
我创建了自己的 C# 应用程序来运行它,但没有用。
在这一点上,我被卡住了,因为如果我手动运行 VBS 应用程序和 C# 应用程序可以正确运行宏。
我尝试了以下组合:
- 仅在用户登录时运行。->成功。
- 运行用户是否登录。->失败。
- 运行用户是否登录。另外,以最高权限运行。->失败。
- 运行用户是否登录。另外,不要存储密码... ->失败。
- 运行用户是否登录。另外,不要存储密码...并以最高权限运行 ->失败。
- 运行用户是否登录。另外,以最高权限运行并隐藏。->失败。
- 运行用户是否登录。另外,不要存储密码...和 Hidden -> Failed。
- 运行用户是否登录。另外,不要存储密码...,以最高权限运行并 Hidden -> Failed。
另外,我也尝试安排 VBA 宏,没有区别(这是我的第一次尝试)。
此外,正如我在评论中强调的那样。我已经使用我的管理员帐户和已经是某些计划任务的服务帐户进行了测试。
此外,命令看起来像这些:
C:\...\MacroRunner.exe
C:\...\MacroRunner.vbs
两者都在 CMD 中运行。另外,我尝试手动运行它们中的每一个。我没想到只有预定的时间执行了它。
知道我做错了什么吗?谢谢你的时间。
PS:
如果您阅读 StackOverflow 问题,则该人面临同样的问题,但他正在寻找代码。我个人确信这是服务器问题,而不是代码问题。
此外,这不是您可以找到类似主题的第一个地方:
https://www.thespreadsheetguru.com/blog/how-to-automatically-run-excel-vba-macros-daily
如果程序仅在用户登录时工作,则意味着它需要一个交互式会话。
它在运行时实际上不显示任何窗口这一事实并不重要:如果代码中的某些内容需要交互式会话(即使您不知道)并且无法获得它,它将失败。由于 VBA 宏设计为在 Office 应用程序中运行(在正常情况下始终具有 UI),因此这一点也不奇怪;除非原始编码器采取额外步骤以允许宏以非交互方式运行,否则这是预期的行为。
如果没有实际的应用程序代码,我们将无法为您提供任何帮助;我建议您在 StackOverflow 上询问如何确保 VBA 宏可以在没有交互式会话的情况下运行。
我找到了如何解决我的问题。squillman在 Super User 中找到了这个旧答案:
https://superuser.com/a/579901
现在,我还需要做什么?
在此之后,我能够正常运行它。
谢谢@Massimo 的提示。