WorksheetFunction.VLookup не найдет совпадений, несмотря на то, что COUNTIF показывает совпадение - PullRequest
0 голосов
/ 31 марта 2020

Я работаю над частью кода, где я взял информацию с одной вкладки, и теперь мне нужно сопоставить информацию с другой вкладки. На вкладке «Таблица счетов-фактур» я создал объединенное поле в том же порядке, что и приведенный ниже тест на соответствие, без пробелов и знаков пунктуации.

Я использовал вариант этого кода в другом месте и это работало просто отлично, но по некоторым причинам это не будет работать здесь. Функция COUNTIF обнаруживает, что результат существует, но я не могу с ним сравниться.

Я пытался запустить его без переменной диапазона InvoiceRng и просто введя диапазон, а также с Это. Однако я продолжаю получать ошибку 1004, что совпадение не может быть найдено. Любые идеи, почему этот код не будет работать в этом разделе, когда я несколько раз успешно использовал этот похожий макет?

Set InvoiceRng = Sheets("Invoice Spreadsheet").Range("A3:AG" & LRInvoice)

If Application.WorksheetFunction.CountIfs( _
      Sheets("Invoice Spreadsheet").Range("I3:I" & LRInvoice), InvItem, _
      Sheets("Invoice Spreadsheet").Range("Y3:Y" & LRInvoice), InvBill, _
      Sheets("Invoice Spreadsheet").Range("Z3:Z" & LRInvoice), InvShip, _
      Sheets("Invoice Spreadsheet").Range("AA3:AA" & LRInvoice), InvApp, _
      Sheets("Invoice Spreadsheet").Range("H3:H" & LRInvoice), InvOrder) > 0 Then

    MatchTest = InvItem & InvOrder & InvBill & InvShip & InvApp

    'List Price
    Match = Application.WorksheetFunction.VLookup(MatchTest, InvoiceRng, 29, False)
    ActiveSheet.Range("I" & currentrow) = Match

    'Discount %
    Match = Application.WorksheetFunction.VLookup(MatchTest, InvoiceRng, 30, False)
    ActiveSheet.Range("K" & currentrow) = Match

    'Monthly Net
    Match = Application.WorksheetFunction.VLookup(MatchTest, InvoiceRng, 31, False)
    ActiveSheet.Range("L" & currentrow) = Match

    'Total Tax
    Match = Application.WorksheetFunction.VLookup(MatchTest, InvoiceRng, 32, False)
    ActiveSheet.Range("M" & currentrow) = Match

    'Total Amount
    Match = Application.WorksheetFunction.VLookup(MatchTest, InvoiceRng, 33, False)
    ActiveSheet.Range("N" & currentrow) = Match
End If

1 Ответ

1 голос
/ 31 марта 2020

Вы можете пропустить значения и просто использовать Match:

Set InvoiceRng = Sheets("Invoice Spreadsheet").Range("AB3:AG" & LRInvoice)

MatchTest = InvItem & InvOrder & InvBill & InvShip & InvApp

'do not use "worksheetfunction" - or will get run-time error if no match
m = Application.Match(MatchTest, InvoiceRng.Columns(1), 0) 'any match?
'test return value for error
If Not IsError(m) Then
    With ActiveSheet.Rows(currentrow)
        .Range("I1").Value = InvoiceRng.cells(m, 2).value
        .Range("k1").Value = InvoiceRng.cells(m, 3).value
        .Range("L1").Value = InvoiceRng.cells(m, 4).value
        .Range("M1").Value = InvoiceRng.cells(m, 5).value
        .Range("N1").Value = InvoiceRng.cells(m, 6).value
    End With
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...