如何使用vbscript获取运行excel实例的工作簿名称?

时间:2013-04-09 17:29:13

标签: excel vbscript

Dim objXL, strMessage

On Error Resume Next

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

If Not TypeName(objXL) = "Empty" then
    strMessage = "Excel Running"    
Else 
    strMessage = "Excel NOT Running"
End If

MsgBox strMessage, vbInformation, "Excel Status"

嘿,非常感谢伙计。这真的让我接近所寻找的东西,更接近解决方案。 让我告诉你我的确切要求/问题: 实际上我的问题是,从Java我试图找到具有特定工作簿名称的Excel实例,但即使它出现,也不会返回Excel实例。在我的情况下,我打开了一个Excel,其中包含2个工作簿“Book1”和“Book2”。 当我试图找到任何这些工作簿名称的Excel时,没有给出任何结果。要缩小范围,只能在我的一台客户端计算机上观察到此问题。在休息机上这个相同的java代码工作正常。 这在卸载Excel2010并安装Excel2007后开始发生。

所以我想要做的是,想要创建一个vbscript,我可以将workbookname作为输入,它将返回我是否有这样的Excel实例运行与给定的工作簿名称。

嘿,请指导我进一步创建这样的脚本,我将提供工作簿名称和脚本将查找此类Excel实例是否正在运行。即使工作簿名称作为脚本中的硬编码输入传递也不是问题。我将根据我的工作簿名称进行更改。

感谢你之前的回复并等待这个回复.. :))

3 个答案:

答案 0 :(得分:6)

如果您可能打开多个实例,而不是检测特定工作簿是否已打开,则可以使用:

  1. 此代码用于检查所有实例Can VBA Reach Across Instances of Excel?
  2. 中的所有打开的工作簿
  3. 检测文件是否已被使用。请参阅Sid's suggestion
  4. 中的Detect whether Excel workbook is already open
  5. Doug's suggestion使用GetObject附加到您知道工作簿名称的主机实例。根据{{​​3}},您可以使用Set xlApp = GetObject("YourExcelName").Application来检测“YourExcelName”是否在任何情况下都已打开
  6. 在您最初提出的问题中,下面的代码使用GetObject来检测是否有任何实例是打开的,以及是否有ActiveWorkbook以及该名称是什么。从您编辑的问题我上面的三个链接比这个代码更相关。

    Dim objXL, WB, strMessage
    On Error Resume Next
    Set objXL = GetObject(, "Excel.Application")
    Set WB = objXL.ActiveWorkbook
    On Error GoTo 0
    If Not TypeName(objXL) = "Empty" Then
        If Not TypeName(WB) = "Nothing" Then
        strMessage = "Excel Running - " & objXL.ActiveWorkbook.Name & " is active"
        Else
        strMessage = "Excel Running - no workbooks open"
        End If
    Else
        strMessage = "Excel NOT Running"
    End If
    MsgBox strMessage, vbInformation, "Excel Status"""
    

答案 1 :(得分:2)

我不使用Excel,我希望下一个代码可以给你一个起点。 但是如果你有很多Excel实例在运行,那么你应该自己调查未来。

Dim objXL, strName, bFound, strMsg

On Error Resume Next
Set objXl = GetObject(, "Excel.Application")
On Error GoTo 0
If Err Then
    MsgBox "Excel NOT Running", vbInformation, "Excel Status"
    WScript.Quit(-1)
End If

strName = InputBox("Enter Workbook Name:", "Required")
If Len(strWBName) = 0 Then WScript.Quit(-2)

bFound = False
If objXL.Workbooks.Count > 0 Then
    For Each wb In objXL.Workbooks
        If wb.Name = strName Then
            bFound = True
            Exit For
        End If
    Next
End If

strMsg = "Workbook " & UCase(strName) & " is "
If bFound Then
    MsgBox strMsg & "open", vbInformation, "Result"
Else
    MsgBox strMsg & "not open", vbInformation, "Result"
End If

P.S。在阅读Brettdj之后,更新后的答案看起来像GetObject可以帮助多个Excel实例,所以如果可以,你可以在一个函数中封装你的测试。

Function IsWBookOpen(strWBook)
    On Error Resume Next
    Dim wb: Set wb = GetObject(strWBook)
    IsWBookOpen = Not Err
End Function

答案 2 :(得分:1)

您可以使用以下命令捕获活动工作簿名称。 objXL.ActiveWorkbook.Name

Dim objXL, strMessage

On Error Resume Next

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

If Not TypeName(objXL) = "Empty" then
    strMessage = "Excel Running"    
    WScript.Echo "The active workbook name is " & objXL.ActiveWorkbook.Name
Else 
    strMessage = "Excel NOT Running"
End If

MsgBox strMessage, vbInformation, "Excel Status"