我编写了一个宏,它会自动更新一些excel文件,并希望它在另一个其他脚本从互联网上下载一些数据文件时运行。
但是,我没有足够的权限来检查“运行用户是否登录”。
此外,当屏幕被锁定时,任务计划程序似乎无法打开具有在文件打开时运行的宏的Excel文件。
我浏览了不少网站,但实际上找不到任何满意的答案。我会使用powershell脚本,每隔9.5分钟将鼠标移动一个像素,以防止它在没有安全风险的情况下睡觉。我想我可以使用一个脚本创建一个人工锁屏,锁定键盘和鼠标,同时保持一切活着,这样它就可以运行宏和其他PowerShell脚本,但我真的不具备这方面的专业知识。 / p>
关于我如何解决这个问题的任何其他建议?所有答案都非常感谢!
的答案答案 0 :(得分:0)
首先,它听起来像这个问题:
我无法检查"运行是否已登录使用"因为我 没有足够的特权
...是因为您没有在您尝试创建计划任务的计算机上拥有管理员权限。如果您是管理员,请以管理员身份运行任务管理器,或以具有admin privs的用户身份运行。
假设您符合admin privs标准,您可以打开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()