Ошибка выполнения VBA 1004 - иногда работает vlookup - PullRequest
0 голосов
/ 11 декабря 2018

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

Работает счастливо, но сегодня утром кажется, что только некоторые значения работы DealID и остальные выдают следующую ошибку:

runtime error1004 не удалось получить свойство vlookup класса worksheetfunction

Когда я отлаживаю и наводю курсор мыши на код, он выдает данные, которые я ожидаю увидеть в полях.

Любой совет будет отличным.

Private Sub GetDetailsButton_Click()

Dim xRg As Range
Set xRg = Worksheets("Deal List").Range("A:U")
Dim DealID As Long

DealID = Me.DealIDBox.Value

Me.AgentNameBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 11, False)
Me.LineManagerNameBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 12, False)
Me.CustomerRefBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 8, False)
Me.ComplexMarkerBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 15, False)
Me.DealTimeStampBox.Text = Format(Application.WorksheetFunction.VLookup(DealID, xRg, 3, False), "dd/mm/yy @ hh:mm:ss")
Me.EpicBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 14, False)
Me.StockBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 17, False)
Me.QuantityBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 18, False)
Me.PriceBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 19, False)
Me.GrossBox.Text = Application.WorksheetFunction.VLookup(DealID, xRg, 20, False)
Me.DateOfCallBox.Text = Format(Application.WorksheetFunction.VLookup(DealID, xRg, 4, False), "dd/mm/yy")


End Sub

1 Ответ

0 голосов
/ 11 декабря 2018

Действительно неэффективно каждый раз искать одно и то же значение просто для доступа к другому столбцу, поэтому я предлагаю вам использовать Match, чтобы найти нужную строку, а затем просто получить доступ к этим ячейкам напрямую:

Private Sub GetDetailsButton_Click()

    Dim xRg As Range
    Set xRg = Worksheets("Deal List").Range("A:U")
    Dim DealID As Long
    Dim matchPos

    DealID = Me.DealIDBox.Value
    matchPos = Application.Match(DealID, xRg.Columns(1), 0)
    If IsError(matchPos) Then
        matchPos = Application.Match(CStr(DealID), xRg.Columns(1), 0)
        If IsError(matchPos) Then
            MsgBox DealID & " not found"
            Exit Sub
        End If
    End If

    Me.AgentNameBox.Text = xRg.Cells(matchPos, 11).Value
    Me.LineManagerNameBox.Text = xRg.Cells(matchPos, 12).Value
    Me.CustomerRefBox.Text = xRg.Cells(matchPos, 8).Value
    Me.ComplexMarkerBox.Text = xRg.Cells(matchPos, 15).Value
    Me.DealTimeStampBox.Text = Format(xRg.Cells(matchPos, 3).Value, "dd/mm/yy @ hh:mm:ss")
    Me.EpicBox.Text = xRg.Cells(matchPos, 14).Value
    Me.StockBox.Text = xRg.Cells(matchPos, 17).Value
    Me.QuantityBox.Text = xRg.Cells(matchPos, 18).Value
    Me.PriceBox.Text = xRg.Cells(matchPos, 19).Value
    Me.GrossBox.Text = xRg.Cells(matchPos, 20).Value
    Me.DateOfCallBox.Text = Format(xRg.Cells(matchPos, 4).Value, "dd/mm/yy")

End Sub

Исходя из вашей ошибки, я бы сказал, что некоторые идентификационные номера в вашей таблице xRg хранятся в виде текста, поэтому поиск не удался, поэтому я добавил код для поиска текстовой версии, если это необходимо.

...