我有一个 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
- 打开组件服务(开始 -> 运行,输入 dcomcnfg)
- 深入到组件服务 -> 计算机 -> 我的电脑,然后单击 DCOM 配置
- 右键单击“Microsoft Excel 应用程序”,然后选择“属性”
- 在“身份”选项卡中选择“此用户”,输入交互式用户帐户(域或本地)的 ID 和密码,然后单击“确定”
现在,我还需要做什么?
- 使用我在步骤4中配置的相同帐户配置计划任务。我尝试使用服务帐户但失败了。
- 无论用户是否登录都运行。
此后,我就能正常运行它了。
谢谢@Massimo 的提示。