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

Excel 引用另一个单独窗口中打开的工作簿的方法是什么?,excel,vba,Excel,Vba,我可以使用两种方法在单独的窗口中打开另一个工作簿 TheEmu_Path = "excel.exe " & ThisWorkbook.Path & "\" & "myexcel.xlsx" call Shell(TheEmu_Path, 3) 或 第一种方法我可以打开,但不知道如何为打开的工作簿设置引用 第二个我可以在打开工作簿时引用,但对于以后的任何过程,我不知道如何引用单独打开的工作表 Set oExcel = ?? Set oWB = oExcel.Workbo

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

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

第一种方法我可以打开,但不知道如何为打开的工作簿设置引用 第二个我可以在打开工作簿时引用,但对于以后的任何过程,我不知道如何引用单独打开的工作表

Set oExcel = ??
Set oWB = oExcel.Workbooks("myexcel.xlsx")
Set oWS = oWB.Sheets("F1")
如何设置oExcel(已单独打开的工作簿)的引用

创建并打开后,稍后我想在“新建按钮”命令中更改“单独打开工作簿”中的值

Set oExcel = CreateObject("Excel.Application")
Set oWB = oExcel.Workbooks("myexcel.xlsx")
Set oWS = oWB.Sheets("1")
oWS.Cells(1, 1) = 55
我在第二行有一个错误,因为我相信我仍然没有正确引用oExcel


戴维修正案述评 令人印象深刻,非常感谢

它的工作非常完美,几乎没有添加,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值时,我的文件崩溃了,因此我提出其他问题是令人兴奋和鼓舞的。

创建一个新的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")
等等

虽然我通常不建议使用多个应用程序实例,但我没有任何用处,我只是在一个Excel.application实例中打开所有工作簿

根据评论请求更新

IMO,控制多个实例的最简单方法是从头开始创建新对象,并根据上面的示例在运行时控制它们

在不可能的情况下,仍然可以获取另一个实例。在这两种情况下,我认为您需要知道另一个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")
更难,可能更多才多艺

另一个选项是使用WinAPI函数获取windows句柄。我以前使用WinAPI做过类似的事情,虽然我没有测试下面的示例代码,但它应该是一个很好的起点


感谢戴维,在一个点,后面的绑定还不清楚,让我们考虑它已经打开了,我试过,但是在第二行集合OExcel=CreateObject(“Excel”应用程序)中出错了。设置OWB= OExcel。工作簿(“MyExcel。XLSX”)设置OWS = OWB.TABLE(“1”)OWS。单元格(1, 1)=55我需要单独的实例来划分我的屏幕,还需要一些其他的实例来处理多个监视器。请参阅修订版以获得两个可能的选项,您可以尝试:)
Dim otherWorkbook as Workbook
Set otherWorkbook = oExcel.Workbooks(1) 'or oExcel.Workbooks("Workbook_Name.xlsx")