использование функции using mid для получения значения поиска для формы пользователя?

#excel #vba

#excel #vba

Вопрос:

У меня есть фиктивная пользовательская форма данных, в которой я хочу использовать значение поля со списком для поиска в других полях на странице.

Итак, у меня есть две кнопки выбора на случай, если пользователь не знает идентификатор сотрудника, которого он ищет. если пользователь нажимает name , то поле со списком заполняется как name - employee id и наоборот.

Несмотря на это, моим значением поиска всегда должен быть этот идентификатор сотрудника.

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

итак, я пытаюсь использовать функцию mid, чтобы выполнить мгновенный поиск других текстовых полей на странице формы пользователя.

 Private Sub cmbEmployee_Change()
    On Error Resume Next
    Dim strID
    x = cmbEmployee 'combo box in picture up above
    If optName = True Then
        strID = Mid(x, InStr(x, " - ")   1)
    Else
        strID = Mid(x, InStr(x, " - ") - 1)
    End If
    txtName.Value = Application.VLookup(CLng(strID), _
                            Worksheets("masterws").Range("A:B"), 2, False)
    txtmgrID = Application.VLookup(CLng(strID), _
                            Worksheets("masterws").Range("A:C"), 3, False)
    txtmgrName = Application.VLookup(CLng(strID), _
                            Worksheets("masterws").Range("A:D"), 4, False)
    txtReq = Application.VLookup(CLng(strID), _
                            Worksheets("masterws").Range("A:E"), 5, False)
    txtLocation = Application.VLookup(CLng(strID), _
                            Worksheets("masterws").Range("A:F"), 6, False)
End Sub
 

есть идеи, почему поисковые запросы не заполняются? Возможно ли это вообще?

Комментарии:

1. Сначала избавьтесь от этого On Error Resume Next .

2. @BigBen получение несоответствия типов в cLng части, потому что оно неправильно извлекает employee id . Как я мог бы пересмотреть среднюю функцию сверху, чтобы убедиться, что я извлекаю только число, а не что-либо еще?

3. Но похоже, что не всегда будет employee id так, что вы не можете слепо использовать CLng здесь, верно? Кроме того, если вы используете Debug.Print Mid(x, InStr(x, " - ") 1) , вы увидите, что результат - 44444 , другими словами, 1 делает не то, что вы думаете.

4. @BigBen всегда будет идентификатор сотрудника, но он будет либо слева, либо справа, в зависимости от того, какая кнопка выбора выбрана пользователем.

5. @BigBen использовал функцию разделения, и теперь она отлично работает. спасибо за предложение по обработке ошибок