Значение текстового поля сбрасывается - PullRequest
0 голосов
/ 29 мая 2020

Я попытался повторно использовать код для поиска значения на листе, но, похоже, что-то делаю не так. У меня есть Userform с текстовым полем под названием «KD_ID», в котором мне нужно получить данные, которые были помещены в него и искали на листе («Stammdaten») в Excel, а затем объединить некоторые ячейки рядом с ним в одну строку. (KD_RNG -> Global Variable)

Я использую этот код:

 Private Sub KD_Search_Click()
        Dim KD_Search As String

       KD_Search = Packzettelinfo.KD_ID

        Set KD_RNG = ThisWorkbook.Sheets("Stammdaten").Range("A:A").Find(KD_Search, , xlValues, xlWhole)
        If Not KD_RNG Is Nothing Then
    Customer_Combination.Value = KD_RNG.Offset(0, 1).Value & vbNewLine & KD_RNG.Offset(0, 2).Value & KD_RNG.Offset(0, 3).Value & vbNewLine & KD_RNG.Offset(0, 5).Value & vbNewLine & KD_RNG.Offset(0, 6).Value & KD_RNG.Offset(0, 7).Value




        Else
        MsgBox "Kundennummer konnte nicht gefunden werden (Fehler #002)"
        Packzettelinfo.KD_ID.SetFocus
        Exit Sub
        End If

    End Sub

Дело в том, что я ищу "PZ_ID" в другой подпрограмме (метка PZ-Nr. На скриншоте ниже ) и текстовое поле «KD_ID» (метка KD-Nr.) предварительно заполняется перед следующим поиском.

This shows the problem

Итак, если я изменю «12345» на «23456»,

 Customer_Combination.Value = KD_RNG.Offset(0, 1).Value & vbNewLine & KD_RNG.Offset(0, 2).Value & KD_RNG.Offset(0, 3).Value & vbNewLine & KD_RNG.Offset(0, 5).Value & vbNewLine & KD_RNG.Offset(0, 6).Value & KD_RNG.Offset(0, 7).Value

ничего не вернет, а KD_ID будет сброшен на «12345» ...

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я переформатировал ваш код, чтобы вы могли его понять. Теперь, когда вы решили свою проблему, я подумал, что вы можете этим воспользоваться. Обратите внимание, что ни Packzettelinfo (предположительно имя вашей пользовательской формы), ни Me ключевое слово, которое может занять его место, не требуются, пока код находится на собственном кодовом листе пользовательской формы.

Private Sub KD_Search_Click()

    Dim KD_Search   As String
    Dim KD_Rng      As Range

    KD_Search = KD_ID.Value
    Set KD_Rng = ThisWorkbook.Sheets("Stammdaten").Range("A:A") _
                             .Find(KD_Search, , xlValues, xlWhole)
    If KD_Rng Is Nothing Then
        MsgBox "Kundennummer konnte nicht gefunden werden (Fehler #002)"
        KD_ID.SetFocus
    Else
        With KD_Rng.Resize(1, 8)
            Customer_Combination.Value = .Cells(2).Value & vbNewLine & _
                                         .Cells(3).Value & .Cells(4).Value & vbNewLine & _
                                         .Cells(6).Value & vbNewLine & _
                                         .Cells(7).Value & .Cells(8).Value
        End With
    End If
End Sub
1 голос
/ 29 мая 2020

Я попытался смоделировать ваше приложение. (Комментировать не могу, поэтому пишу ответ). Приведенный ниже код работает хорошо, по крайней мере, без проблем на моем компьютере. Я не обнаружил большой проблемы. Я включил альтернативную строку с меткой Me.Customer_Combination.Caption, поскольку вы не используете ее для ввода (насколько я понял), а просто отображаете результат. Примечание. При использовании текстового поля текст свойства значения остается таким же. Я также закомментировал две строки, так как они не нужны.

Dim KD_RNG As Range
Private Sub KD_Search_Click()
    Dim KD_Search As String
    KD_Search = Me.KD_ID.Text
    Set KD_RNG = ThisWorkbook.Sheets("Stammdaten").Range("A:A").Find(KD_Search, , xlValues, xlWhole)
    If Not KD_RNG Is Nothing Then
        Me.Customer_Combination.Caption = KD_RNG.Offset(0, 1).Value & vbNewLine & KD_RNG.Offset(0, 2).Value & KD_RNG.Offset(0, 3).Value & vbNewLine & KD_RNG.Offset(0, 5).Value & vbNewLine & KD_RNG.Offset(0, 6).Value & KD_RNG.Offset(0, 7).Text
        Me.Customer_CombinationTextBox.Text = KD_RNG.Offset(0, 1).Value & vbNewLine & KD_RNG.Offset(0, 2).Value & KD_RNG.Offset(0, 3).Value & vbNewLine & KD_RNG.Offset(0, 5).Value & vbNewLine & KD_RNG.Offset(0, 6).Value & KD_RNG.Offset(0, 7).Text
    Else
        MsgBox "Kundennummer konnte nicht gefunden werden (Fehler #002)"
        'Me.KD_ID.SetFocus
        'Exit Sub
    End If
End Sub
...