【问题标题】:Run Excel VBA only if Windows task scheduler opened the file仅当 Windows 任务计划程序打开文件时才运行 Excel VBA
【发布时间】:2015-11-13 08:27:09
【问题描述】:

我有一个小的 Excel 表格,每天由用户更新。它包含一个日期列。

我放了一个小 VBA sn-p,当日期列包含与当前日期相等的日期时发送电子邮件警报,然后关闭文件。

此 Excel 是从任务计划程序调用的。

这很好用,但是现在每次用户打开 excel 时,vba 都会发送一封电子邮件并关闭文件。

是否可以仅在通过任务计划程序打开 excel 时运行 VBA? (或者如果文件由特定用户(例如管理员)打开。

【问题讨论】:

  • Environ("Username") 函数可以做你想做的事,但如果安全是一个问题,这不是最好的方法,因为它很容易被欺骗。

标签: excel scheduled-tasks vba


【解决方案1】:

正如 Dave 所说,您可以使用环境变量。但我个人不会使用“用户名”或任何其他帐户方法。如果您使用环境变量,我建议您只使用“计划”之类的东西,Excel 只是查看变量是否存在。从任务调度程序调用时,您显然必须首先设置环境标志。因此,例如,如果调度程序调用一个批处理文件,您在执行 Excel.exe 命令之前在批处理文件中设置环境。

但是,您还应该能够在 Excel 命令行的调用中传递参数,并在 VBA 打开时查看参数是否存在。如果我没记错的话,你可以这样调用:

"C:\Program Files (x86)\Microsoft Office\Office14\Excel.exe" SomeBook.xlsm /e
/SomeParameter/

并且在工作簿 Open even 中,您需要使用 API 提取命令行参数。我认为是这个:

Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long

希望对您有所帮助。

【讨论】:

  • 我没有你那么专业。我将以下行放在 Private Sub Workbook Open () 行之后(Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long CmdPtr = GetCommandLineW() MsgBox CmdPtr)并收到错误消息:只有 cmets 可能出现...
  • 将声明放在模块顶部 - 在显式选项之后(如果您为 Excel 设置了该选项)。在 Open 事件处理程序中,您调用刚刚声明的函数。快速搜索:social.msdn.microsoft.com/Forums/office/en-US/…
猜你喜欢
  • 1970-01-01
  • 2015-12-20
  • 2022-10-13
  • 2012-05-23
  • 2015-11-18
  • 2010-09-22
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多