2017-08-04 72 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

相關問題