找不到为什么我的VBA简单正则表达式命令不起作用

时间:2014-08-15 13:11:13

标签: regex excel vba excel-vba

在Excel VBA中使用此行时:

Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)

我收到警告,说参数或命令无效。

我在我的代码中的许多地方都使用过这一行,并且工作正常,单元格的格式都是标准的(它们是字符串......)。

任何人都可以给我一些关于要寻找什么的提示?

这是我宣布正则表达式的方式:

Dim regexProjet As Object
Set regexProjet = CreateObject("VBScript.RegExp")
regexProjet.IgnoreCase = True
regexProjet.Pattern = "^   ([a-z]+)(-)([0-9]+)" 'conserve seulement la clé du projet

2 个答案:

答案 0 :(得分:2)

如果您的正则表达式与您的数据不匹配,您将得到该回复。为了避免它,使用您正在使用的技术,首先进行测试,看看你的正则表达式是否与你的字符串匹配。

e.g:

If regexProjet.test(Cells(a,1).value) then
    Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)
Else
   ... your error routine
End If

此外,您应该注意,如果您只是尝试匹配整体模式,则不需要捕获组(并且它们将增加执行时间,使正则表达式效率降低)。

答案 1 :(得分:0)

以下是我在Excel 2013中运行的示例代码,但它与您的内容略有不同。 我从[如何使用正则表达式]获得了代码:http://support.microsoft.com/kb/818802

Sub testreg()

   Dim regexProjet As New RegExp
Dim objMatch As Match
Dim colMatches   As MatchCollection
Dim RetStr As String

RetStr = ""

regexProjet.IgnoreCase = True
regexProjet.Pattern = "^   ([a-z]+)(-)([0-9]+)"


Set colMatches = regexProjet.Execute(Cells(1, 1).Value)

For Each objMatch In colMatches   ' Iterate Matches collection.
  RetStr = RetStr & " " & objMatch.Value
Next

Cells(1, 20).Value = RetStr

End Sub