我已经编程了一个宏,它将自动更新一些excel文件,并希望它能在另一个脚本从互联网下载一些数据文件时运行。
但是,我没有足够的特权来检查“运行用户是否登录”。
此外,当屏幕被锁定时,任务调度程序似乎无法打开具有打开文件上运行的宏的Excel文件。
我已经浏览了不少网站,并没有真正找到任何满意的答案。如果不构成安全风险,我会使用powershell脚本,它每9.5分钟移动鼠标一个像素,以防止其睡眠。我想我可以使用一个脚本来创建一个人工锁屏,锁上键盘和鼠标,同时让所有东西都保持活力,这样它就可以运行宏和其他powershell脚本,但是我真的没有这样做的专门知识。
关于我如何避开这件事还有什么其他的建议吗?所有的答案都非常感谢!
发布于 2017-02-22 08:30:30
第一,听起来是这样的问题:
我无法检查“运行是否登录”,因为我没有足够的特权
...is,因为您在试图创建计划任务的机器上没有管理权限。如果您是管理员,请将任务管理器作为管理员运行,或者以用户身份运行管理权限。
假设您满足管理权限标准,您可以打开Excel并使用PowerShell执行宏。使用下面的代码创建并保存一个PowerShell脚本。修改以适应您的工作簿路径、函数名和参数。然后创建一个预定的任务来调用PowerShell脚本。
您还需要确保Excel工作簿的位置位于“受信任的位置”。在Excel中,转到文件>选项>信任中心>信任中心设置>受信任的位置。如果包含Excel工作簿的文件夹不存在,请单击“添加新位置”以添加该文件夹。
如果是灰色的,这很可能是由您的公司设置的组策略(如果您在公司机器/域上)。如果是这样,并且有一些受信任的位置,请将Excel工作簿移动到一个位置。
# set params for workbook
$WorkbookPath = 'C:\Path\To\WEorkbook.xlsb'
$FunctionName = 'HelloWorld'
$FunctionParam = 'Test'
# create an Excel com object
$Excel = New-Object -ComObject Excel.Application
$Excel.visible = $false
$Workbook = $Excel.Workbooks.Open($WorkbookPath)
# call function with params. add extra comma delimited params here, like this:
# $Excel.Run($FunctionName, $P1, $P2, $P3, $P4)
$Excel.Run($FunctionName, $FunctionParam)
# close the workbook
$Workbook.Close()
# quit Excel and cleanup
$Excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()https://stackoverflow.com/questions/42363193
复制相似问题