Я полагаю, что следующее будет работать так, как вы ожидаете, чтобы пропустить пустые ячейки, которые вы могли бы сделать следующим образом:
If Oldcode <> "" Then
Пожалуйста, см. Ниже ваш исправленный код, я 'Мы также удалили lrw2
как неиспользуемый в коде, еще один момент, который следует учитывать, это то, что вы не помещаете возвращаемое значение из Vlookup нигде, кроме переменной, так что это не добавит значения в таблицу Excel?Не уверен, что вы над этим работаете или нет ...:
Sub vlookupFU()
'vlookupfollowup material & Eff-out date
Dim wkbNPI As Workbook: Set wkbNPI = ThisWorkbook
Dim wksPT As Worksheet: Set wksPT = wkbNPI.Sheets("Packaging tracking")
Dim wksFU As Worksheet: Set wksFU = wkbNPI.Sheets("FollowUpMaterial")
Dim wf As WorksheetFunction: Set wf = Application.WorksheetFunction
Dim lrw2 As Long, i As Long ', j As Long
Dim PTarray As Variant
Dim Oldcode As String, FUM As String, FUMD As String
'lrw2 = wksPT.Cells(Rows.Count, "A").End(xlUp).Row 'not used so no need for this line
PTarray = wksPT.Range("A7:AG" & lrw2)
For i = 1 To wksPT.Range("A7:AG" & lrw2).Rows.Count
Oldcode = PTarray(i, 31)
If Oldcode <> "" Then
FUM = wf.VLookup(PTarray(i, 31), wksFU.Range("B:R"), 13, False) 'vlookup follow up material
FUMD = wf.VLookup(PTarray(i, 31), wksFU.Range("B:R"), 17, False) 'vlookup follow up material effective out date
'FUM = PTarray(i, 32) 'you get the value above and then you overwrite it here??
'FUMD = PTarray(i, 33) 'you get the value above and then you overwrite it here??
End If
Next i
End Sub