Невозможно проверить, существует ли значение в массиве - PullRequest
0 голосов
/ 12 февраля 2019

При попытке проверить, присутствует ли значение в массиве If Not IsError(Application.Match(arrString, RegM, 0)) Then... Но по какой-то причине это не работает.Я также попробовал следующее, но безуспешно Application.WorksheetFunction.CountIf(DirArray2, RegM)

Когда я проверяю значения в msgbox, все кажется нормальным, но все равно не работает (ниже msgbox показано, например, «DMM | DMM | TEST»

MsgBox RegM & " | " & Application.WorksheetFunction.CountIf(DirArray2, RegM)

Я процитировал всю функцию, потому что, возможно, вы найдете в коде что-то, что вызывает проблему

Sub mk_RegExp()
    If Sheets("MISC").Range("C62") = True Then
        Dim objRegex As Object
        Dim RegMC As Object
        Dim RegM As Object
        Dim item As Variant
        Dim DirArray As Variant
        Dim DirArray2 As Variant
        Dim DirArr As Variant
        Dim test As Variant
        '------------------------------------------------------------------------------------------------
        Sheets("LI").Range("C12:DJ42").Font.Color = vbBlack
        '------------------------------------------------------------------------------------------------
        arr = Sheets("MISC").Range("R4:R145").Value
        LastRow = Sheets("MISC").Cells(Rows.Count, "L").End(xlUp).Row
        DirArray = Join(Application.Transpose(Sheets("MISC").Range("L4:L" & LastRow).Value), "|")
        LastRow2 = Sheets("MISC").Cells(Rows.Count, "M").End(xlUp).Row
        DirArray2 = Join(Application.Transpose(Sheets("MISC").Range("M4:M" & LastRow2).Value), "|")
        arrString = Join(Application.Transpose(Sheets("MISC").Range("M4:M" & LastRow2).Value), ",")
        DirArr = DirArray & "|" & DirArray2
        '------------------------------------------------------------------------------------------------
        Set objRegex = CreateObject("vbscript.regexp")
        With objRegex
            .Global = True
            .Pattern = DirArr

           For Each item In arr
                If .test(Range(item).Value) Then
                    Set RegMC = .Execute(Range(item).Value)
                    For Each RegM In RegMC
                        If Not IsError(Application.Match(arrString, RegM, 0)) Then
                            'MsgBox RegM & " | " & Application.WorksheetFunction.CountIf(DirArray2, RegM)
                            Range(item).Characters(RegM.FirstIndex + 1, RegM.Length).Font.Color = RGB(0, 176, 80)
                        ElseIf RegM = "COL" Or RegM = "CRT" Then
                            Range(item).Characters(RegM.FirstIndex + 1, RegM.Length).Font.Color = RGB(0, 176, 240)
                        Else
                            Range(item).Characters(RegM.FirstIndex + 1, RegM.Length).Font.Color = RGB(247, 150, 70)
                        End If
                    Next
                End If
            Next item
        End With
    Else
        Sheets("LI").Range("C12:DJ42").Font.Color = vbBlack
    End If
End Sub

1 Ответ

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

В дополнение к моему комментарию

Sub test_array()

Dim a() As Variant

a = Application.Transpose(Range("a1:a5"))

Debug.Print Join(a, "|")

Debug.Print Application.WorksheetFunction.Match("Test 2", a, 0)
Debug.Print Application.WorksheetFunction.Match("Test 2", Join(a, "|"), 0)


End Sub

Ошибка второй строки, первая в порядке.

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