Как вставить данные из пользовательской формы в указанную строку c с указанным значением c - PullRequest
1 голос
/ 12 марта 2020

Я хочу создать пользовательскую форму, которая может найти значение «Продажи» в столбце 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'

.

1 Ответ

1 голос
/ 12 марта 2020

У меня ошибка в строке "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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...