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

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" 

嘿,谢谢你的朋友。 这真的使我接近寻找的东西,更接近解决scheme。 让我告诉你我确切的要求/问题:其实我的问题是,从Java我试图find具有特定工作簿名称的Excel实例,但即使它出现不返回Excel实例。 在我的情况下,我有一个Excel中打开2个工作簿“Book1”和“Book2”。 当试图用这些工作簿名称查找Excel时,我没有给出任何结果。 为了缩小这个问题,只有在我的客户端机器上才能观察到这个问题。 在rest机器这个相同的Java代码工作正常。 这在卸载Excel2010并安装Excel2007后开始发生。

所以我想要做的是,要创build一个vbscript,我可以给工作簿作为input,它会返回我是否有这样的Excel实例运行给定的工作簿名称。

嘿,请进一步指导我创build这样的脚本,我会给工作簿名称和脚本将find是否这样的Excel实例正在运行或不。 即使工作簿名称作为脚本中的硬编码input传递,也不是问题。 我将根据我的工作簿名称进行更改。

感谢您以前的答复,并等待这一个.. :))

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

  1. 此代码检查所有实例中的所有打开的工作簿可以VBA跨Excel的实例吗?
  2. 检测文件是否已被使用。 查看Sid的build议从检测Excel工作簿是否已经打开
  3. Doug的build议是使用GetObject连接到你知道工作簿名称的主机实例。 根据Microsoft支持文章,您可以使用Set xlApp = GetObject("YourExcelName").Application检测“YourExcelName”在任何情况下是否打开

在最初问的问题中,下面的代码使用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""" 

我不使用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 

PS阅读Brettdj后更新的答案看起来像GetObject可以帮助多个Excel实例,所以如果这样的作品,你可以封装你的testing在一个函数。

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

您可以使用以下命令捕获活动工作簿名称。 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"