从VBS

时间:2015-05-09 01:07:59

标签: excel vbscript com

我正在编写一个小型VBScript来执行以下操作:

  1. 检查Excel是否已打开;如果不打开它。
  2. 如果Excel已打开,请检查特定工作簿是否已打开。
  3. 如果工作簿已打开,请将其激活;如果没有,请打开它。
  4. 到目前为止,我已经能够编写以下代码:

    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尚未打开,它将无声地打开新实例。

2 个答案:

答案 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的新实例。