运行 Excel VBA 仅当 Windows 任务计划程序打开文件时
Run Excel VBA only if Windows task scheduler opened the file
我有一个小Exceltable,每天由用户更新。它包含一个日期列。
我放了一个小 VBA 片段,当日期列包含与当前日期相同的日期时发送电子邮件提醒,然后关闭文件。
此 Excel 从任务计划程序调用。
这很好用,但现在每次当用户打开 excel 时,vba 都会发送一封电子邮件并关闭文件。
只有在通过任务计划程序打开 excel 时才可以 运行 VBA 吗? (或者如果文件由特定用户(例如管理员)打开。
正如 Dave 提到的,您可以使用环境变量。但我个人不会使用 'username' 或任何其他帐户方法。如果您使用环境变量,我建议您只使用 "scheduled" 之类的东西,而 Excel 只是查看变量是否存在。从任务调度程序调用时,您显然必须首先设置环境标志。因此,例如,如果调度程序调用批处理文件,则在执行 Excel.exe 命令之前在批处理文件中设置环境。
不过,你应该也可以在Excel命令行的Invokation中传递一个参数,在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
希望对您有所帮助。
我有一个小Exceltable,每天由用户更新。它包含一个日期列。
我放了一个小 VBA 片段,当日期列包含与当前日期相同的日期时发送电子邮件提醒,然后关闭文件。
此 Excel 从任务计划程序调用。
这很好用,但现在每次当用户打开 excel 时,vba 都会发送一封电子邮件并关闭文件。
只有在通过任务计划程序打开 excel 时才可以 运行 VBA 吗? (或者如果文件由特定用户(例如管理员)打开。
正如 Dave 提到的,您可以使用环境变量。但我个人不会使用 'username' 或任何其他帐户方法。如果您使用环境变量,我建议您只使用 "scheduled" 之类的东西,而 Excel 只是查看变量是否存在。从任务调度程序调用时,您显然必须首先设置环境标志。因此,例如,如果调度程序调用批处理文件,则在执行 Excel.exe 命令之前在批处理文件中设置环境。
不过,你应该也可以在Excel命令行的Invokation中传递一个参数,在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
希望对您有所帮助。