При попытке проверить, присутствует ли значение в массиве 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