我正在编写一个小型VBScript来执行以下操作:
到目前为止,我已经能够编写以下代码:
ExcelFileName = "....xlsx"
On Error Resume Next
Set xl = GetObject(, "Excel.Application")
IF Err Then
If Err.Number = 429 Then
WScript.Echo "Workbook not open (Excel is not running)."
Else
WScript.Echo Err.Description & " (0x" & Hex(Err.Number) & ")"
End If
WScript.Quit 1
End If
On Error Goto 0
Set wb = Nothing
For Each obj In xl.Workbooks
If obj.Name = ExcelFileName Then
Set wb=obj
xl.DisplayAlerts = False
wb.Save
Exit For
End If
Next
If wb Is Nothing Then
xl.Workbooks.Open("C:\...")
End If
Set xl = Nothing
Set wb = Nothing
但是如果Excel尚未打开,它将无声地打开新实例。
答案 0 :(得分:2)
使用GetObject打开文件。
set wb = GetObject("c:\folder\excel.xls")
COM将解决需要完成的工作。只需要一条线就可满足您的三项要求。
这是使用带有文件名的GetObject时VB要求COM执行的内容。
<强> BindMoniker 强>
通过其名字对象定位对象,如果对象处于非活动状态则激活该对象,并检索指向该对象上指定接口的指针。
HRESULT BindMoniker( LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID FAR * ppvResult );
答案 1 :(得分:1)
GetObject在为您提供正在运行的Excel实例或导致错误时表现正常。如果出现错误(Excel未运行),请使用CreateObject创建Excel的新实例。