2015-01-09 42 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中第一次打開的實例相同)。它沒有找到其他的... –

相關問題