我正在尝试将不同工作簿中的数据编译并整理到一张 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)
传递
False
给UpdateLinks
将阻止更新链接对话框弹出。- 即使您确定您的值完全在变量的范围内,也请使用
Long
而不是。我读到过,在最新版本的 VBA 中,数据类型变得更加高效。Integer
Integer
Long