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

时间:2013-10-04 21:43:35

标签: excel vba

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

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的引用(已经单独打开的工作簿)?

创建和打开后,我想在新的按钮命令

中更改该打开的单独工作簿中的值
Set oExcel = CreateObject("Excel.Application")
Set oWB = oExcel.Workbooks("myexcel.xlsx")
Set oWS = oWB.Sheets("1")
oWS.Cells(1, 1) = 55

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


对David修订版的评论

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

只需很少的添加就可以完美地工作,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

在使用导致#na值的UpdateRemoteReferences时,我发现文件崩溃是令人兴奋和令人鼓舞的问题。

1 个答案:

答案 0 :(得分:2)

创建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函数来获取窗口句柄。我之前使用WinAPI做过这样的事情,虽然我没有测试下面的示例代码,但它应该是一个很好的起点。

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