当屏幕锁定时从Excel运行宏

问题描述:

我编写了一个宏,它将自动更新一些excel文件,并希望在另一个脚本从互联网下载某些数据文件时运行它。当屏幕锁定时从Excel运行宏

但是,我没有足够的权限来检查“运行用户是否已登录”。

此外,当屏幕锁定时,任务计划程序似乎无法打开具有在文件打开时运行的宏的Excel文件。

我浏览过不少网站,无法找到任何满意的答案。如果它不构成安全风险,我将使用powershell脚本,每9.5分钟将鼠标移动一个像素,以防止其睡眠。我想我可以使用脚本创建一个人造锁屏,锁定键盘和鼠标,同时保持所有活动,以便可以运行宏和其他PowerShell脚本,但我真的没有专业知识来做到这一点。

有关如何解决此问题的其他建议?所有的答案非常感谢!

我真不明白,在Running macros at scheduled time when pc is locked

+0

是否有Excel文件永久打开选项?你所引用的答案基本上每分钟运行一次'Module1.test'。 'tempo()'在设定的时间调用'message_ctrl()',然后调用'Module1.test',然后调用'message + ctrl()'的'tempo()'等等。导通时间(https://msdn.microsoft.com/en-us/library/office/ff196165.aspx)。 您很可能需要让PowerShell和Excel以某种方式进行通信 - 如果用户限制阻止您直接执行该操作,则使用中间文件。 – gms0ulman

首先答案,这听起来像这样的问题:

我不能勾选“运行使用是否登录或不”,因为我 没有足够的权限

......这是由于您没有管理员权限,因此您试图在计算机上创建计划任务。如果您是管理员,请以管理员身份运行任务管理器,或以具有管理员权限的用户身份运行。

假设您符合管理权限标准,您可以打开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()