2015-01-09 43 views
2

我试图完成能够找到其他Excel实例并使用VBA控制它们。如何查找其他Excel实例并将它们分配给Excel.Application变量

学习其他线程这是我到目前为止,但由于某种原因它不起作用。

我试图做的是以下几点:

Dim xl as Excel.Application 
Dim objList As Object 
Dim objProcess As Object 

Set objList = GetObject("winmgmts:")._ 
    ExecQuery("select * from win32_process where name='Excel.exe'") 
If objList.Count > 1 Then 
    For Each objProcess In objList  ' 
     If objProcess <> Application Then ' 
     Set xl = objProcess    ' this is what doesn't work 
     Exit For      ' 
     End If        ' 
    Next         ' 
Else 
    Set xl = New Excel.Application 
End If 

'Do stuff with xl 

谁能告诉我,我要去哪里错了,或者如果这是这甚至可能吗?

+0

您使用哪种语言? VBA? 。净? – Petay87

+0

我正在使用VBA(标记编辑) –

+0

您是否正在寻找某个特定文件,或者您是否因某种原因想要获取所有实例 – brettdj

回答

0

看看这段代码我很快把它放在一起,当我有5个开放的excel实例时,这对我有用,每个实例都打开它自己的工作簿。该代码将弹出一个消息框,用于所有excel实例中的所有打开的工作簿,并显示工作簿名称。您应该可以修改此以将该工作簿或实例的Excel分配给变量。

Sub Testing() 

Dim xlApp As Excel.Application 
Set xlApp = GetObject(, "Excel.Application") 
Dim xlWB As Excel.Workbook 

For Each xlWB In xlApp.Workbooks 
    MsgBox xlWB.Name 
Next xlWB 

Set xlApp = Nothing 
Set xlWB = Nothing 

End Sub 
+0

不幸的是,这并不能解决我的问题。当我的宏运行的实例是第一个被发现的时候,我不会去看另一个实例。我想要的是识别至少一个其他实例,以两种方式执行检查,以确定找到的实例是否不是我正在运行宏的实例,然后将该实例分配给变量。 –

+0

您是否尝试过上述代码,完全没有改动?创建一个新的Excel工作簿,并用上面的代码创建一个宏。打开许多其他实例并运行此代码。您应该会发现每个打开的工作簿都会显示一个消息框。 – Petay87

+1

我做到了。我没有从哪个实例运行代码,它总是找到相同的工作簿(与Excel中第一次打开的实例相同)。它没有找到其他的... –

相关问题