如何将数据从用户表单插入到具有特定值的特定行中

  • 本文关键字:数据 用户 插入 表单 excel vba
  • 更新时间 :
  • 英文 :


我想创建一个用户表单,它可以在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)

最新更新