从VBS打开或激活Excel中的工作簿

从VBS打开或激活Excel中的工作簿,excel,vbscript,com,Excel,Vbscript,Com,我正在编写一个小VBScript来执行以下操作: 检查Excel是否打开;如果没有打开它 如果Excel已打开,请检查特定工作簿是否已打开 如果工作簿已打开,请将其激活;如果没有,打开它 到目前为止,我已经能够编写以下代码: ExcelFileName = "....xlsx" On Error Resume Next Set xl = GetObject(, "Excel.Application") IF Err Then If Err.Number = 429 Then W

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

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

    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尚未打开,它将以静默方式无法打开新实例。

    GetObject的正常行为是为您提供一个正在运行的Excel实例或导致错误。如果出现错误(Excel未运行),请使用CreateObject创建一个新的Excel实例。

    GetObject通常会为您提供一个正在运行的Excel实例或导致错误。如果出现错误(Excel未运行),请使用CreateObject创建一个新的Excel实例。

    GetObject通常会为您提供一个正在运行的Excel实例或导致错误。如果出现错误(Excel未运行),请使用CreateObject创建一个新的Excel实例。

    GetObject通常会为您提供一个正在运行的Excel实例或导致错误。如果出现错误(Excel未运行),请使用CreateObject创建新的Excel实例。

    使用GetObject打开文件

    set wb = GetObject("c:\folder\excel.xls")
    
    COM将确定需要做什么。这一行就是您的三个需求所需的全部

    这就是VB在使用带有文件名的GetObject时要求COM做的事情

    bindMonike

    通过对象的名字对象定位对象,如果对象处于非活动状态,则激活该对象,并检索指向该对象上指定接口的指针

    HRESULT BindMoniker( LPMONIKER pmk, 德沃德·格福普特, refid iidResult, LPVOID FAR*ppvResult );


    使用GetObject打开文件

    set wb = GetObject("c:\folder\excel.xls")
    
    COM将确定需要做什么。这一行就是您的三个需求所需的全部

    这就是VB在使用带有文件名的GetObject时要求COM做的事情

    bindMonike

    通过对象的名字对象定位对象,如果对象处于非活动状态,则激活该对象,并检索指向该对象上指定接口的指针

    HRESULT BindMoniker( LPMONIKER pmk, 德沃德·格福普特, refid iidResult, LPVOID FAR*ppvResult );


    使用GetObject打开文件

    set wb = GetObject("c:\folder\excel.xls")
    
    COM将确定需要做什么。这一行就是您的三个需求所需的全部

    这就是VB在使用带有文件名的GetObject时要求COM做的事情

    bindMonike

    通过对象的名字对象定位对象,如果对象处于非活动状态,则激活该对象,并检索指向该对象上指定接口的指针

    HRESULT BindMoniker( LPMONIKER pmk, 德沃德·格福普特, refid iidResult, LPVOID FAR*ppvResult );


    使用GetObject打开文件

    set wb = GetObject("c:\folder\excel.xls")
    
    COM将确定需要做什么。这一行就是您的三个需求所需的全部

    这就是VB在使用带有文件名的GetObject时要求COM做的事情

    bindMonike

    通过对象的名字对象定位对象,如果对象处于非活动状态,则激活该对象,并检索指向该对象上指定接口的指针

    HRESULT BindMoniker( LPMONIKER pmk, 德沃德·格福普特, refid iidResult, LPVOID FAR*ppvResult );



    脚本试图打开Excel时到底出了什么问题?此时Excel没有启动。我使用的是
    GetObject(,“Excel.Application”)
    ,这就是它试图附加到现有Excel实例的原因。如果没有(表示Excel已关闭),我希望它打开Excel。很抱歉,如果我没有说清楚,这是我第一次尝试编写代码。您是否收到任何错误,或者它只是保持关闭?它只是保持关闭。
    GetObject
    仅获取现有实例(如果要获取对象)。如果失败,您需要
    CreateObject
    (创建一个新实例)。这里已经有很多这样做的例子了。你找到他们了吗?我在这个问题右边的相关列表中找到了一个脚本试图打开Excel时到底出了什么问题?此时Excel没有启动。我使用的是
    GetObject(,“Excel.Application”)
    ,这就是它试图附加到现有Excel实例的原因。如果没有(表示Excel已关闭),我希望它打开Excel。很抱歉,如果我没有说清楚,这是我第一次尝试编写代码。您是否收到任何错误,或者它只是保持关闭?它只是保持关闭。
    GetObject
    仅获取现有实例(如果要获取对象)。如果失败,您需要
    CreateObject
    (创建一个新实例)。这里已经有很多这样做的例子了。你找到他们了吗?我在这个问题右边的相关列表中找到了一个脚本试图打开Excel时到底出了什么问题?此时Excel没有启动。我使用的是
    GetObject(,“Excel.Application”)
    ,这就是它试图附加到现有Excel实例的原因。如果没有(表示Excel已关闭),我希望它打开Excel。很抱歉,如果我没有说清楚,这是我第一次尝试编写代码。您是否收到任何错误,或者它只是保持关闭?它只是保持关闭。
    GetObject
    仅获取现有实例(如果要获取对象)。如果失败,您需要
    CreateObject
    (创建一个新实例)。这里已经有很多这样做的例子了。你找到他们了吗?我在这个问题右边的相关列表中找到了一个脚本试图打开Excel时到底出了什么问题?此时Excel没有启动。我正在使用
    GetObject(,“Excel.Application”)
    ,这就是它试图附加到exi的原因