Excel VBA:将工作表移动到新的工作簿,同时维护工作表对象关联

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

去testing:

比方说,我们在名为Book1.xlsb和Book2.xlsb的文件夹中有两个excel工作簿,每个工作簿中有一张名为Sheet1的工作表。 当我们打开Book1时,我们把下面的子文件放入工作表对象中,并尝试从另一个工作表移动工作表。

一切都“有效”,但工作表对象在进程中丢失,并且一旦尝试再次使用,就会抛出错误。 是否有可能将工作表移动到一个新的工作簿,而不是丢失工作表对象关联,以便以后可以引用?

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 

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

在你的代码中

 ws.Move wb1.Sheets(1) 

您也可以将工作表ws移动到Book2.xlsb文件的第一个工作表

“表(1)”表示文件的第一张

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

  Set ws = wb1.Sheets(1) 

重置ws对象:

 Set ws = wb1.WorkSheets("Sheet2") 

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

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

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

 Set ws = wb1.WorkSheets(1)