我想创建一个用户表单,它可以在E列中找到"Sales"值,然后将剩余数据输入到同一行。
Set APAC = Sheet2
APAC.Activate
Range("E18:E1888").Select
For Each D In Selection
If D.Value = "TWO.Sales.Value" Then
Exit For
End If
Next D
Rows(D.Row).Select
D.Offset(0, 2).Value = TWO.RSA.Value
D.Offset(0, 3).Value = TWO.Part.Value
D.Offset(0, 4).Value = Application.WorksheetFunction.VLookup(TWO.Part.Value, Worksheets("DataEntry").Range("T2:U70").Value, 2, False)
D.Offset(0, 5).Value = TWO.Program.Value
D.Offset(0, 6).Value = TWO.QTY.Value
Sheet2.Activate
这是我的代码,但
运行时错误'91'
出现
。
我在"Rows(D.Row(.select"行出现错误–Jacob 2分钟前
这意味着在Range("E18:E1888")
中没有找到"TWO.Sales.Value"
,因此D
什么都不是。您需要检查是否找到该值。我也有一种感觉,你想要If D.Value = TWO.Sales.Value Then
而不是If D.Value = "TWO.Sales.Value" Then
也不需要Select/Activate
。您可以直接使用对象。您可能想了解如何避免在Excel VBA 中使用Select
无论何时使用VLookup
,最好处理未找到匹配项时可能弹出的错误。有多种方法可以做到这一点。我在下面的代码中展示了一种方法。
这就是你想要的吗?(未测试(
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")
是动态的,那么您可能需要找到此处显示的最后一行,然后将该范围用作.Range("E18:E" & LastRow)