Как использовать Match, когда я ищу иногда числа, а иногда текст? - PullRequest
0 голосов
/ 02 августа 2020

Когда я ищу текст, он возвращает OK .. Но когда я ищу числа, он выдает ошибку «Ошибка времени выполнения '13': введите missmatch». Ячейки сформированы как «Общие», вот код, который у меня есть.

enter image description here

введите описание изображения здесь

Private Sub CommandButton1_Click()

If Me.TextBox1.Value <> "" Then
Dim sh As Worksheet
Dim i As Long
Set sh = ThisWorkbook.Sheets("Sheet1")

strSerialNum = Me.TextBox1.Value

i = Application.Match(strSerialNum, sh.Range("A:A"), 0)

    Me.TextBox2.Value = sh.Range("B" & i).Value

End If

End Sub

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Вы можете проверить, является ли значение из вашего текстового поля числом c, используя функцию IsNumeric(). Если вы используете Variant вместо переменной String, вы можете просто преобразовать ее в подтип Decimal, чтобы избежать несоответствия типов.

Private Sub CommandButton1_Click()
    Dim sh As Worksheet
    Dim i As Long
    Dim vSerialNum As Variant
    
    Set sh = ThisWorkbook.Sheets("Sheet1")

    If Me.TextBox1.Value <> "" Then

        vSerialNum = Me.TextBox1.Value
        
        'If the value from the input box is numeric, convert it to a decimal subtype
        If IsNumeric(vSerialNum) Then vSerialNum = (CDec(vSerialNum))
    
        i = Application.Match(vSerialNum, sh.Range("A:A"), 0)

        Me.TextBox2.Value = sh.Range("B" & i).Value

    End If

End Sub
1 голос
/ 02 августа 2020

TextBox содержит строку, а не число, хотя строка может быть числовой c. Поэтому логично убедиться, что поиск ведется по строке, а не по числу. Попробуйте

strSerialNum = Me.TextBox1.Text
or even
strSerialNum = Cstr(Me.TextBox1.Text)

Теперь вопрос в том, что у вас в A: A. Формат General вызывает проблемы, потому что вы оставляете выбор типа данных для Excel. Если вы намереваетесь искать строку, убедитесь, что столбец A отформатирован как Text .

Длинное и короткое из приведенного выше состоит в том, что вы не можете искать текст в столбец чисел, вы также не можете искать число в столбце строк. Вы можете контролировать, какой тип данных искать, и вы можете изменить тип данных в зависимости от того, в каком столбце вы выполняете поиск, при условии, что вы знаете, какой тип данных у вас в каком столбце.

Если вы не можете контролировать тип данных ваших столбцов поиска, единственная альтернатива - попробовать сначала поискать один тип, а затем другой, используя On Error Resume Next и If Err Then.

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