如何使用 VBA 将多个工作簿和工作表中的数据编译并整理到一个新的 Excel 文件中

如何使用 VBA 将多个工作簿和工作表中的数据编译并整理到一个新的 Excel 文件中

我正在尝试将不同工作簿中的数据编译并整理到一张 Excel 表中。我正尝试将两个工作簿 Secondtest1 和 Secondtest2 中的 A1:D1 中的数据拉入 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

相关内容