首页 文章

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

提问于
浏览
1

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

去测试:

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

一切"works",但工作表对象在此过程中丢失,并在您再次尝试使用它时立即抛出错误 . Is it possible to move the worksheet to a new workbook and not lose that worksheet object association so that it can be referenced later?

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

    在你的代码中

    ws.Move wb1.Sheets(1)
    

    您随后将工作表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)
    

相关问题