
Я пытаюсь скомпилировать и сопоставить данные из разных рабочих книг в один лист 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
Я отметил звездочкой строку, в которой получаю ошибку. Ошибка, которую я получаю, это "Application-defined or object-defined error". Буду признателен за любую помощь, спасибо.
решение1
Так и должно быть xlUp
(это строчная буква «L», а не цифра «1»).
Редактировать
Несколько моментов:
- Всегда используйте
Option Explicit
в верхней части своих модулей, даже если это не для производственной среды. Это сразу бы указало вам на ошибку в вашем коде. - Выберите одно соглашение об именовании и следуйте ему последовательно (в основном вы используете заглавные буквы, но объявили одну переменную как
sourceFile
). - Некоторые люди могут предпочесть именование процедур, используя иное соглашение, нежели то, которое используется для переменных (это на ваше усмотрение).
Если вы открываете книгу ввода без намерения ее дальнейшего изменения, лучше использовать аргумент
ReadOnly
и, возможно, также аргументUpdateLinks
, например:Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
Передача
False
предотвратитUpdateLinks
появление диалогового окна обновления ссылки.- Используйте
Long
вместо ,Integer
даже если вы уверены, что ваши значения будут в пределах диапазона переменнойInteger
. Я где-то читал, чтоLong
тип данных стал более эффективным в последних версиях VBA.