Как мне написать эту формулу оценки, чтобы вариант не возвращал ошибку? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть формула, которая отлично работает при использовании в операторе «С / с» для диапазона:

.Formula = "=IFERROR(INDEX(" & MasterDataRange.Address(External:=True) & ",MATCH(" & Cells(iRow, Entry1).Address(True, False) & "&Left(" & Cells(iRow + 1, Entry2).Address(False, False) & ", 4)&""" & wks4.Range("L7").Value & """," & MasterRowMatchRange.Address(External:=True) & ",0),MATCH(""" & header01 & """," & MasterColumnMatchRange.Address(External:=True) & ",0)),0)"

При попытке оценить выше и присвоить его варианту , вариант возвращает результат ошибки «Ошибка 2015».

xResult = Evaluate("=IFERROR(INDEX(" & MasterDataRange.Address(External:=True) & ",MATCH(" & Cells(iRow, Entry1).Address(True, False) & "&Left(" & Cells(iRow + 1, Entry2).Address(False, False) & ", 4)&""" & wks4.Range("L7").Value & """," & MasterRowMatchRange.Address(External:=True) & ",0),MATCH(""" & header01 & """," & MasterColumnMatchRange.Address(External:=True) & ",0)),0)")

Может кто-нибудь помочь мне понять это? Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2020

После долгих размышлений выясняется, что для метода оценки vba существует ограничение в 255 символов, плюс мне нужно было удалить некоторые строковые ссылки, используемые методом .Formula

Спасибо за помощь , Для тех, кто заинтересован, код теперь:

    Set cell = wks4.Range("L7")
    On Error Resume Next
    rResult = Evaluate("MATCH(" & Cells(iRow, Entry1).Address(True, False) & "&" & "Left(" & Cells(iRow + 1, Entry2).Address(False, False) & ", 4)" & "&" & cell.Address(External:=True) & "," & MasterRowMatchRange.Address(External:=True) & ",0)") 'Match Header
    cResult = Evaluate("MATCH(""" & header01 & """," & MasterColumnMatchRange.Address(External:=True) & ",0)")  'Match Column
    xResult = Evaluate("INDEX(" & MasterDataRange.Address(External:=True) & "," & rResult & "," & cResult & ")")
    On Error GoTo 0
    If IsError(xResult) Then 'Handle Error 2042 = #N/A
        Range(Cells(iRow, iCol), Cells(iRow, iCol)) = 0
    Else:
        Range(Cells(iRow, iCol), Cells(iRow, iCol)) = xResult
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...