VBA Lookup Несоответствие - PullRequest
       0

VBA Lookup Несоответствие

0 голосов
/ 15 октября 2019

Я просмотрел предыдущие вопросы по этому вопросу и не могу найти ответ. Я использую VLOOKUP в VBA, чтобы заполнить пользовательскую форму данными, основанными на выборе. Я продолжаю получать несоответствие по некоторым записям, и другие работали, теперь ни одна не работает. Вот код:

Private Sub jobRefCbo_Change()
Application.ScreenUpdating = False

Call Lists_sort ' This just sorts a list of the 'Active' data so the user only sees the active jobs in the combo box. 



    Me.nameTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 2, False)
    'Me.acNoTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 2, False)
    Me.jobDesc2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 3, False)
    'Me.date2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 4, False)
    Me.month2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 5, False)
    Me.timeOnJobTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 6, False)
    Me.StatusTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 7, False)
    Me.startTime2Txt.Value = Format(CDate(Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 8, False)), "hh:mm:ss AM/PM")

    Application.ScreenUpdating = True

End Sub

Любые советы в этом вопросе в целом очень ценятся.

1 Ответ

1 голос
/ 15 октября 2019

Предложения по исправлению:

Private Sub jobRefCbo_Change()

    Dim m, v, rngSearch As Range

    Application.ScreenUpdating = False

    Lists_sort 'use of Call is deprecated

    v = Trim(Me.jobRefCbo.Value)

    If IsNumeric(v) Then
        Set rngSearch = Worksheets("Lists ").Range("I3:P21")
        'use Match to find a hit in the first column...
        m = Application.Match(CDbl(v), rngSearch.Columns(1), 0)
        If Not IsError(m) Then
            'got a hit so return the values
            With rngSearch.Rows(m)
                Me.nameTxt.Value = .Cells(2).Value
                Me.jobDesc2Txt.Value = .Cells(3).Value
                'etc etc
            End With
        End If
    Else
        MsgBox "Lookup value must be numeric", vbExclamation
    End If

    Application.ScreenUpdating = True

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