Ваши строки
With wkbSource
a = .Cells(Rows.Count, 1).End(xlUp).Row
просто говорят "Ячейки в рабочей книге"
вам также нужно указать рабочий лист, например,
With wkbSource.sheets(1)
a = .Cells(.Rows.Count, 1).End(xlUp).Row
Вам также необходимоукажите рабочий лист в Rows.count
, и, наконец, событие закрытия вашей книги больше не будет работать в With
, поскольку With
теперь ссылается на рабочий лист PLUS, он был внутри цикла For
во всяком случае, чтобы он закрылся на первом экземпляре копирования, вместо завершения цикла, поэтому я переместил его в конец (если это не было запланировано, но я все равно переместил его, чтобы я мог сказать книге закрыться за пределами предложения With workbook.worksheet
Весь исправленный код здесь:
Sub CopyRange()
Dim i As Integer
Dim wkbDest As Workbook
Dim wkbSource As Workbook
Set wkbDest = ThisWorkbook
Dim strExtension As String
Dim LastRow As Long
Dim a As Integer
Const strPath As String = "H:\My Documents\FinalCopyPaste\"
ChDir strPath
strExtension = Dir(strPath & "*.xls*")
Do While strExtension <> ""
Set wkbSource = Workbooks.Open(strPath & strExtension)
With wkbSource.Sheets(1) ' I'm telling it to use the sourceworkbook, sheet 1
a = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To a
If .Cells(i, 1).Value = "PIZZA" And .Cells(i, 4).Value = "WATER" And .Cells(i, 8).Value = "9/26/2019" Then
' You also needed to specify the book and sheet here
LastRow = wkbDest.Worksheets("Zone").Cells(wkbDest.Worksheets("Zone").Rows.Count, "A").End(xlUp).Offset(1).Row
Worksheets("Sheet1").Rows(i).Copy wkbDest.Worksheets("Zone").Range("A" & LastRow)
End If
Next
End With
'moved the close to outside the For loop and made sure it's closing wkbSource
wkbSource.Close savechanges:=False
strExtension = Dir
Loop
End Sub