Текстовое поле активирует код при нажатии ввода

У меня есть два столбца в Excel, которые имеют соответствующие элементы. Моя программа должна проверить textbox3 на его значение, и если это значение существует (без учета регистра) в первом столбце, тогда textbox4 примет соответствующее значение. Таким образом, в основном пользователь вводит имя элемента в textbox3 и нажимает ввод (клавиша, а не кнопка). Если он существует, то textbox4 примет соответствующее значение.

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        Dim i As Integer
        Dim abrv As String
        abrv = TextBox3.Text
        Sheet2.Activate
        For i = 1 To 2494
            If abrv = Range("a" & i).Value Then
                TextBox4.Text = Range("b" & i).Value
            End If
        Next i
        If TextBox4.Text = "" Then
            TextBox4.Text = "Abbreviation does not exist."
        End If
    End If
End Sub

person user3487972    schedule 30.04.2014    source источник


Ответы (1)


Вы должны указать, на каком листе находится диапазон. Попробуйте следующее:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
    Dim i As Integer
    Dim abrv As String
    abrv = TextBox3.Text
    Sheet2.Activate
    For i = 1 To 2494
        If abrv = Sheet2.Range("a" & i).Value Then
            TextBox4.Text = Sheet2.Range("b" & i).Value
        End If
    Next i
    If TextBox4.Text = "" Then
        TextBox4.Text = "Abbreviation does not exist."
    End If
End If

Также вы можете получить ошибку с этим:

 Range("a" & i)

Если вы используете это:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        Dim i As Integer
        Dim abrv As String
        abrv = TextBox3.Text
        Sheet2.Activate
        For i = 1 To 2494
            If abrv = Sheet2.Range("a" & strings.trim(str(i))).Value Then
                TextBox4.Text = Sheet2.Range("b" & strings.trim(str(i))).Value
            End If
        Next i
        If TextBox4.Text = "" Then
            TextBox4.Text = "Abbreviation does not exist."
        End If
    End If
person Pedrumj    schedule 30.04.2014
comment
Когда я нажимаю «Ввод» в пользовательской форме после ввода аббревиатуры, курсор перемещается в следующее текстовое поле вместо получения соответствующего значения. Кроме того, лист2.активировать не заставляет диапазон смотреть на лист 2? Просто интересно, я понятия не имею, как это работает. - person user3487972; 30.04.2014
comment
Вы можете вернуть фокус на предыдущее текстовое поле, используя что-то вроде TextBox1.SetFocus. Sheet2.activate фокусируется только на листе2. - person Pedrumj; 30.04.2014
comment
Спасибо, первый набор кода, который вы разместили, работает отлично! Я просто забыл изменить textbox1_keydown на textbox3_keydown - person user3487972; 30.04.2014
comment
спс, рад, что смог помочь :) - person Pedrumj; 30.04.2014