У меня ошибка в строке "Rows (D.Row) .select" - Джейкоб, 2 минуты go
Это означает, что "TWO.Sales.Value"
не найдено в Range("E18:E1888")
и, следовательно, D
было ничто. Вы должны проверить, было ли найдено значение. Также у меня есть ощущение, что вы хотели If D.Value = TWO.Sales.Value Then
вместо If D.Value = "TWO.Sales.Value" Then
Также нет необходимости в Select/Activate
. Вы можете напрямую работать с объектами. Возможно, вы захотите увидеть Как избежать использования Select в Excel VBA
Всякий раз, когда вы работаете с VLookup
, лучше обрабатывать ошибку, которая может появиться, когда совпадение не нашел. Есть разные способы сделать это. Я показал один способ в коде ниже.
Это то, что вы пытаетесь? ( UNTESTED )
Option Explicit
Sub Sample()
Dim APAC As Worksheet
Dim curRow As Long
Dim aCell As Range
Dim Ret
Set APAC = Sheet2
With APAC
For Each aCell In .Range("E18:E1888")
If aCell.Value = TWO.Sales.Value Then
curRow = aCell.Row
Exit For
End If
Next aCell
If curRow = 0 Then
MsgBox "Not Found"
Else
.Range("G" & curRow).Value = TWO.RSA.Value
.Range("H" & curRow).Value = TWO.Part.Value
On Error Resume Next
Ret = Application.WorksheetFunction.VLookup(TWO.Part.Value, _
Worksheets("DataEntry").Range("T2:U70").Value, 2, False)
On Error GoTo 0
If Ret <> "" Then .Range("I" & curRow).Value = Ret
.Range("J" & curRow).Value = TWO.Program.Value
.Range("K" & curRow).Value = TWO.QTY.Value
End If
End With
End Sub
ПРИМЕЧАНИЕ : Если диапазон .Range("E18:E1888")
является динамическим c, тогда вы можете найти последнюю строку, как показано ЗДЕСЬ , а затем используйте диапазон как .Range("E18:E" & LastRow)