如何在计算机锁定时运行VBScript GetObject?

时间:2014-08-08 18:40:19

标签: excel excel-vba vbscript vba

由于一些原因here我无法打开这样的Excel工作表:

Set excel = CreateObject("Excel.Application")
Set workbook = excel.Workbooks.Open(file_path.xls)
excel.Visible = True

所以我试图像这样打开它:

CreateObject("WScript.Shell").Run "excel.exe"
WScript.Sleep 5000

CreateObject("WScript.Shell").Run "excel.exe"
WScript.Sleep 5000

Set excel = GetObject(,"Excel.Application")
Set workbook = excel.Workbooks.Open( excel_file_path, 3) 
excel.Visible = True

当我的电脑没有锁定时,运行正常。通常,即使计算机被锁定,VBScripts也可以运行。但是,只有当计算机被锁定时,在GetObject(,"Excel.Application")行才会出现以下运行时错误:

Error:  ActiveX component can't create object: 'GetObject'
Code:   800A01AD
Source: Microsoft VBScript runtime error

我尝试将Windows 7设置更改为在一些不活动后永不锁定,但我公司的IT部门已执行该设置。

有没有办法从锁定的屏幕运行此脚本,还是有其他推荐的方法?

编辑:

它与excel文件的打开方式有关...如果我打开一个新的空白excel页面而不是锁定屏幕,GetObject将很好地获取该文档,但如果我打开它使用shell然后注销,它不会......

2 个答案:

答案 0 :(得分:0)

在似乎不起作用的部分中,在设置visible = TRUE后添加此行,然后查看您的计算是否按预期工作:

CreateObject("WScript.Shell").AppActivate objExcel.Name

不确定它是否可行,但我在某些代码中做了类似的事情,这就是那里的。 我必须在某处复制或阅读它(希望我能把它归功于哪里)。

仅供参考 - 我有一个打开Excel的vbscript,启动一个新工作簿,通过​​可查询对象以文本形式读取文件,然后进行一些自动编辑。适合我的代码是:

...
set objExcel = CreateObject("Excel.application") 

' Commented out the following line, so the user can see something is happening.
' objExcel.application.screenupdating   = false  ' Don't update the screen while    shucking and jiving is going on.

objExcel.visible = true
objExcel.application.cursor = 2 ' change cursor to the hourglass.

CreateObject("WScript.Shell").AppActivate objExcel.Name

' Create a new workbook and worksheet
objExcel.workbooks.add
objExcel.worksheets.add

etc

答案 1 :(得分:0)

尝试代码:

CreateObject("WScript.Shell").Run "excel.exe """ & excel_file_path & """"
WScript.Sleep 5000

CreateObject("WScript.Shell").Run "excel.exe"
WScript.Sleep 5000

Set excel = GetObject(,"Excel.Application")