如何在 VBA 中將多個工作簿和工作表中的資料編譯並整理到一個新的 Excel 文件中

如何在 VBA 中將多個工作簿和工作表中的資料編譯並整理到一個新的 Excel 文件中

我正在嘗試將不同工作簿中的資料編譯並整理到一張 Excel 工作表中。我試圖將 A1:D1 中的資料從兩個工作簿 Secondtest1 和 Secondtest2 提取到 ThisWorkbook 中。到目前為止,這是我的程式碼。

Sub collateData()

    Dim SourceArray
    Dim SheetName As String, SourceRange As String
    Dim TargetWorkbook As Workbook, sourceFile As Workbook
    Dim TargetSheet As Worksheet
    Dim i As Integer
    Dim LastRow As Long

    SourceArray = Array("H:\Secondtest1.xlsx", "H:\Secondtest2.xlsx")
    SheetName = "Sheet1"
    SourceRange = "A1:D1"
    Set TargetWorkbook = ThisWorkbook
    Set TargetSheet = TargetWorkbook.Sheets("Sheet1")
    For i = 0 To UBound(SourceArray)
        Set sourceFile = Workbooks.Open(SourceArray(i))
        **LastRow = TargetSheet.Cells(TargetSheet.Rows.Count, 1).End(x1Up).Row**
        With sourceFile
            .Sheets(SheetName).Range(SourceRange).Copy Destination:=TargetSheet.Range("A" & i & ":D" & i)

            .Close
        End With
    Next

End Sub

我在出現錯誤的行上標出了星號。我收到的錯誤是“應用程式定義或物件定義的錯誤”。我將不勝感激任何幫助,謝謝。

答案1

應該是xlUp(它是小寫“L”,而不是數字“1”)。

編輯

幾點:

  • Option Explicit始終在模組的頂部使用,即使它不是用於生產環境。這樣做會立即指出程式碼中的錯誤。
  • 選擇一種命名約定並始終遵循該約定(您主要使用大寫單詞,但您已將一個變數聲明為sourceFile)。
  • 有些人可能更喜歡使用與變數不同的約定來命名過程(這取決於您)。
  • 如果您開啟輸入工作簿而不打算進一步修改它,最好使用該ReadOnly參數,也可能使用該UpdateLinks參數,如下所示:

    Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
    

    傳遞FalseUpdateLinks將阻止彈出更新連結對話框。

  • 即使您確定您的值完全在變數的範圍內,也可以使用Long而不是。我在某處讀到,最新版本的 VBA 中的資料類型變得更有效率。IntegerIntegerLong

相關內容