Excel VBA - RegExp - “测试”操作有效,但“执行”操作不起作用

时间:2016-05-04 10:08:02

标签: regex excel vba excel-vba

请参阅以下代码:

Sub CountAndHighlightProblematicCells()

Dim RegExpo As New RegExp
Dim strPattern As String: strPattern = "[^\u0020-\u007E]"
Dim specialCharactersFound As Object


Dim strInput As String
Dim counter As Long

RegExpo.Global = True
RegExpo.MultiLine = True
RegExpo.IgnoreCase = False
RegExpo.Pattern = strPattern

counter = 0

For Each cell In Worksheets(1).Range("A1:A100")
    strInput = Worksheets(1).Range(cell.Address).Value
    If (RegExpo.Test(strInput)) Then
        Worksheets(1).Range(cell.Address).Interior.ColorIndex = 20
        counter = counter + 1
    End If
    Set specialCharactersFound = RegExpo.Execute(strInput)

Next

MsgBox ("Number of affected cells: " & counter)
MsgBox ("Number of special characters found: " & specialCharactersFound.Count)

End Sub

由于某种原因,测试操作按预期工作,但执行操作没有。

如果你认为它与for循环有关,我检查了它没有 - 即使只关注一个单元格,执行操作也不能按预期工作。

我做错了什么?我对VBA和RegExp都不是很熟悉 具体

提前致谢,

Kurkum

1 个答案:

答案 0 :(得分:1)

我建议将这两行添加到变量声明中:

Dim specialCharactersFound As New Collection
Dim mtch As Object

然后,使用

代替counter = 0Next之间的代码
counter = 0
Set specialCharactersFound = New Collection ' Initialize the collection for special chars

For Each cell In Worksheets(1).Range("A1:A100")
    strInput = Worksheets(1).Range(cell.Address).Value
    Set mtch = RegExpo.Execute(strInput)  ' Find the matches
    For Each objMatch In mtch             ' Iterate throug the match collection
       specialCharactersFound.Add (mtch(0).Value) ' Add the char found to the collection
    Next
    Worksheets(1).Range(cell.Address).Interior.ColorIndex = 20
    counter = counter + 1   ' Increment the affected cell count
Next