Excel VBA:将工作表移动到新工作簿,同时保持工作表对象关联

时间:2017-08-04 18:25:09

标签: excel vba excel-vba

此处的目标是设置工作表对象,然后将该工作表移动到新工作簿并继续使用该工作表对象。但是,通过移动该工作表,似乎先前与其关联的工作表对象将丢失。

测试:

假设我们在名为Book1.xlsb和Book2.xlsb的同一文件夹中有两个excel工作簿,每个工作簿中都有一个名为Sheet1的工作表。当我们打开Book1时,我们放入下面的sub并尝试使用工作表对象从另一个移动工作表。

一切"工作",但工作表对象在此过程中丢失,并在您再次尝试使用它时立即抛出错误。 是否可以将工作表移动到新工作簿而不会丢失该工作表对象关联,以便以后可以引用它?

Option Explicit
Sub test()
    Dim wb1 As Workbook
    Dim wb2 As Workbook

    Dim ws As Worksheet

    Set wb1 = ThisWorkbook
    Set wb2 = Workbooks.Open("Book2.xlsb")

    Set ws = wb2.Sheets(1)

    ws.Name = "Sheet2" 'name changed to avoid conflict with the one already there
    ws.Move wb1.Sheets(1)

    MsgBox ws.Name 'this line throws an error, indicating that ws association has been lost

End Sub

编辑: 如果这是不可能的,我们如何可靠地将该工作表对象重新设置为我们刚刚移动的对象?

2 个答案:

答案 0 :(得分:1)

要重置ws对象:

Set ws = wb1.WorkSheets("Sheet2")

如果你不知道这个名字,你知道它被移到了最后一个位置,对吗?

Set ws = wb1.WorkSheets(wb1.WorkSheets.Count)

如果它被移动到第一个位置,那么:

Set ws = wb1.WorkSheets(1)

答案 1 :(得分:0)

在您的代码中

<div class="title_right mid_center top_menu">
  <a class="btn btn-app" href="/Home/ComoFunciona">1</a>
  <a class="btn btn-app" href="/Home/Tarifas">2</a>
  <a class="btn btn-app" href="/Home/Contacto">3</a>
  <a class="btn btn-app" href="/Security/Account">4</a>
</div>

您随后将工作表ws移动到Book2.xlsb文件的第一张工作表

&#34;表(1)&#34;表示文件的第一张表

所以你可以像这样重置ws。

ws.Move wb1.Sheets(1)