2017-08-04 116 views
1

此处的目标是设置工作表对象,然后将该工作表移至新工作簿并继续使用该工作表对象。但是,通过移动该工作表,似乎之前与其关联的工作表对象将丢失。Excel VBA:在保持工作表对象关联的同时将工作表移至新工作簿

测试:

假设我们有一个名为Book1.xlsb和Book2.xlsb每一个表中点名Sheet1中的同一文件夹两个Excel工作簿。当我们打开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 

编辑: 如果这是不可能的,我们怎么能可靠地重新设置工作表对象的一个​​是我们刚搬?

+0

不,如果它在新的工作簿中,您将不得不重新创建它。但是,这很容易,因为您知道工作表的名称,并且有WorkBook对象参考。 – braX

回答

0

在你的代码

ws.Move wb1.Sheets(1) 

您alreay移动板WS到Book2.xlsb的第一张文件

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

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

Set ws = wb1.Sheets(1) 
1

要重置WS对象:

Set ws = wb1.WorkSheets("Sheet2") 

如果你不知道这个名字,你就知道它被移动到最后的位置,对不对?

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

如果它被移动到第一位置,则:

Set ws = wb1.WorkSheets(1) 
+0

这仅适用于带入的工作表始终命名相同的情况。在某些情况下,如果我们没有重命名该表以避免冲突,excel会自动将其重命名为一个我们不知道的新名称。 – Ethan

+0

在您的示例代码中,您明确指定了它。我会给你另一种选择。 – braX

+0

为了响应您的编辑,它不会显示为添加到最后。如果您的行为表现出不同的行为,那么也许您使用的是不同版本的Excel,我正在使用Office Professional 2016 – Ethan

相关问题