首页 > 解决方案 > 如何将数据从用户窗体插入到具有特定值的特定行

问题描述

我想创建一个用户表单,可以在 E 列中找到“销售”值,然后将剩余数据输入到同一行。

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”

发生。

标签: excelvba

解决方案


我在“Rows(D.Row).select”行有错误 – Jacob 2 分钟前

这意味着"TWO.Sales.Value"没有找到Range("E18:E1888"),因此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)


推荐阅读