在另一个窗口中引用另一个打开的工作簿的方法是什么?

我可以使用两种方法在另一个窗口中打开另一个工作簿

TheEmu_Path = "excel.exe " & ThisWorkbook.Path & "\" & "myexcel.xlsx" call Shell(TheEmu_Path, 3) 

要么

 Set oExcel = New Excel.Application oExcel.Workbooks.Open Filename:=TheEmu_Path & "myexcel.xlsx" 

第一种方法,我可以打开,但不知道如何设置打开工作簿的引用第二我可以参考打开工作簿,但稍后为任何后来的过程我不知道如何引用单独打开的工作表

 Set oExcel = ?? Set oWB = oExcel.Workbooks("myexcel.xlsx") Set oWS = oWB.Sheets("F1") 

如何设置oExcel的参考(已经单独打开的工作簿)?

创build和打开后,稍后我要在新的button命令中打开单独的工作簿中的值

 Set oExcel = CreateObject("Excel.Application") Set oWB = oExcel.Workbooks("myexcel.xlsx") Set oWS = oWB.Sheets("1") oWS.Cells(1, 1) = 55 

我在第二行中有一个错误,因为我相信我还没有正确引用oExcel。


评论大卫修订

令人印象深刻,非常感谢。

它非常适用于很less的补充,oExcel将被视为工作簿直接 – 太棒了!

 Dim oExcel As Object 'or Dim oExcel As Workbook Dim oWS As Excel.Worksheet 'or Dim oWS As Worksheet Set oExcel = GetObject(ThisWorkbook.Path & "\" & "myexcel.xlsx").Application 'or Set oExcel = GetObject(ThisWorkbook.Path & "\" & "myexcel.xlsx") Set oWS = oExcel.Sheets("1") oWS.Cells(1, 1) = 4 

这是令人激动和鼓舞的要求其他问题,因为使用UpdateRemoteReferences导致#na值时,我的文件崩溃。

创build一个新的Excel实例:

 Dim oExcel as Excel.Application 'or As New Excel.Application Set oExcel = New Excel.Application 'Dim oExcel as Object 'Set oExcel = CreateObject("Excel.Application") 'Alternative method for late-binding 

当我这样做时,一个新的Excel打开,并有一个空白的工作簿文件。 要引用此工作簿:

 Dim oWB as Workbook Set oWB = oExcel.Workbooks(1) 

在这个实例中打开一个文件:

 Dim anotherWB as Workbook Set anotherWB = oExcel.Workbooks.Open("c:\test.xlsx") 

等等。

尽pipe我通常不推荐使用应用程序的多个实例,但我只是没有任何用处,我只是在Excel.Application的一个实例中打开所有的工作簿。

每个评论请求更新

控制多个实例(IMO)的最简单方法是从一个干净的平台开始,创build一个新的对象,并在上面的示例中在运行时控制它们。

在不可能的情况下,仍有可能获得另一个实例。 在这两种情况下,我认为您需要知道另一个Excel实例中打开的工作簿文件的名称。

更轻松

如果您知道工作簿名称,则可以访问如下所示的内容:

 Dim oExcel As Object ' or Excel.Application Set oExcel = GetObject("Workbook_Name.xlsx").Application 

然后,您可以使用普通方法引用工作簿,只要您符合您使用oExcel ,例如:

 Dim otherWorkbook as Workbook Set otherWorkbook = oExcel.Workbooks(1) 'or oExcel.Workbooks("Workbook_Name.xlsx") 

更困难,可能更多才多艺

另一个select是使用WinAPI函数来获取窗口句柄。 我以前使用过WinAPI来做这样的事情,尽pipe我还没有testing下面的示例代码,但它应该是一个很好的开始。

http://excelribbon.tips.net/T009452_Finding_Other_Instances_of_Excel_in_a_Macro.html