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实例是否正在运行。即使工作簿名称作为脚本中的硬编码输入传递也不是问题。我将根据我的工作簿名称进行更改。
感谢你之前的回复并等待这个回复.. :))
答案 0 :(得分:6)
如果您可能打开多个excel实例,而不是检测特定工作簿是否已打开,则可以使用:
GetObject
附加到您知道工作簿名称的主机实例。根据{{3}},您可以使用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"""
答案 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"