Преобразование совпадения индекса в другой лист в код VBA - PullRequest
0 голосов
/ 06 февраля 2019

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

Вот мойформула:

=IFERROR(INDEX(Comments!$K$2:$K$76,MATCH(C8,Comments!$B$2:$B$76,0)),"COMMENT REQUIRED")

Сначала я попытался приспособиться к V-Lookup в коде VBA, поскольку мне сказали, что это будет проще, но я не смог сделать это успешно.Код VBA, который я пробовал, приведен ниже:

        Dim h
        With DestinationSheet.Rows(DestinationRow)
        h = Application.VLookup(.Cells(3).Value, Sheets("Comments").Range("$A$2:$C$100"), 3, False)
        .Cells(8).Value = IIf(IsError(h), "COMMENT REQUIRED", h)
        .Cells(8).Font.Color = IIf(IsError(h), RGB(255, 0, 0), h)
        .Cells(8).Font.Bold = IIf(IsError(h), True, h)
        End With

1 Ответ

0 голосов
/ 06 февраля 2019

Ваша основная проблема заключается в следующих двух строках:

    .Cells(8).Font.Color = IIf(IsError(h), RGB(255, 0, 0), h)
    .Cells(8).Font.Bold = IIf(IsError(h), True, h)

h возвращает ошибку или значение, но вы пытаетесь использовать его в качестве цвета RGB и логического значения.h не может быть всеми тремя вещами одновременно.

Зафиксируйте ошибку раньше и используйте стандартный IF Тогда

Dim DestinationSheet As Worksheet
Set DestinationSheet = Worksheets("Sheet1") 'change to your sheet

Dim cmmtsSheet As Worksheet
Set cmmtsSheet = Worksheets("Comments")

Dim DestinationRow As Long
DestinationRow = 3

With DestinationSheet

    Dim mtchRow As Long
    On Error Resume Next
        mtchRow = Application.Match(.Cells(DestinationRow, 3), cmmtsSheet.Range("A:A"), 0)
    On Error GoTo 0

    With .Cells(DestinationRow, 8)
        If mtchRow > 0 Then
            .Value = cmmtsSheet.Cells(mtchRow, 3)
            .Font.Color = RGB(255, 255, 255)
            .Font.Bold = False
        Else
            .Value = "Comment Required"
            .Font.Color = RGB(255, 0, 0)
            .Font.Bold = True
        End If
    End With
End With
...