Я пытаюсь создать скрипт VBA, который будет собирать данные из четырех разных книг. Пока что я просто тестирую код с одной рабочей книгой, но я получаю сообщение об ошибке при попытке получить данные. Хотя я хотел бы получить данные из четырех Рабочих книг, не открывая их, мне нужно будет открыть их, чтобы найти последнюю строку данных. Вот мой текущий код:VBA - Извлечение данных из закрытой книги Excel
Public Sub GetData()
Application.ScreenUpdating = False
Dim LastRow As Integer
Dim WB As Workbook
Dim xlsPath As String
Dim xlsFilename As String
Dim SheetName As String
xlsPath = "C:\Users\a27qewt\My Documents\Document Retention\FI_DocumentRetention.xlsm"
Set WB = Workbooks.Open(xlsPath)
'Workbooks("FI_DocumentRetention.xlsm").Sheets("S&S Document Locations").Unprotect
LastRow = Workbooks("FI_DocumentRetention.xlsm").Sheets("S&S Document Locations").Cells(Rows.Count, "A").End(xlUp).Row
Workbooks("SS_Index.xlsm").Sheets("Document Index").Range(Cells(2, 1), Cells(LastRow, 5)).Value = _
Workbooks("FI_DocumentRetention.xlsm").Sheets("S&S Document Locations").Range(Cells(2, 1), Cells(LastRow, 5)).Value
WB.Close False
End Sub
Я получаю 1004 приложения/объект, определенную ошибку в в Workbooks("FI_DocumentRetention.xlsm").Sheets("S&S Document Locations").Range
... линию. Любые предложения почему?
При использовании 'Range (Cells(), Cells())' как Range() и Cells() - если не квалифицирован с рабочим листом - будет относиться к активной таблице. Вам нужно указать рабочий лист для всех частей этого выражения. Ваш код будет легче управлять, если вы объявите переменную для каждого листа и используете эти ссылки при работе с диапазонами, вместо того, чтобы всегда использовать «Рабочие книги (...). Листы (...)' –
@TimWilliams, спасибо за предложение. Я смог успешно использовать «Range (« A2: E »и LastRow)». Есть ли более эффективный или более чистый способ сделать это? – CJK