从VBA中的函数返回RegEx MatchCollection - 错误450

时间:2017-03-07 08:10:22

标签: regex vba

我一直在努力解决这个问题几天,基本上找不到解决方案

我已经在VBA中编写了一个函数,该函数应该从RegEx.Execute语句返回结果,但是每次到达'End Function'语句时,我都会得到运行时错误450而我无法确定问题出在哪里,因为我的错误分配对象变量不会引发错误。

我是VBA和编程的新手,因此我可能只是在对象/ MatchCollection / Collections的行为方式中误解了一些东西。

这是我的代码:

Function FindDateAndTimePatternRegEx(s As String) As Object 
On Error GoTo erro
Dim objRex As RegExp
Dim arrMatch As Object


's = "   Afgår 01-01-2017 00:24:00, anvendt log 01-01-2017 10:53:24 er 10:29:24 EFTER dette"

Set objRex = New RegExp

With objRex

    .IgnoreCase = True
    .Global = True ' the global parameter makes sure that all pattern matches in the string are found and returned in the return collection
    .Pattern = "([0-9]{2}\-[0-9]{2}\-[0-9]{4})" & " " & "([0-9]{2}:[0-9]{2}:[0-9]{2})" 

End With

Set arrMatch = objRex.Execute(s) 

Set FindDateAndTimePatternRegEx = arrMatch

'Debug.Print FindDateAndTimePatternRegEx.Item(0).FirstIndex
'Debug.Print FindDateAndTimePatternRegEx.Item(1)   


Set objRex = Nothing

Exit Function

erro:
MsgBox Err.Description

End Function

每次我在立即窗口中尝试这个,调用函数并使用字符串s

? ?FindDateAndTimePatternRegEx("   Afgår 01-01-2017 00:24:00, anvendt log 01-01-2017 10:53:24 er 10:29:24 EFTER dette")

debug.print返回预期值但是当达到Exit Function或End Function时,我得到运行时错误450

有人可以解释出了什么问题吗?

提前致谢

祝你好运

2 个答案:

答案 0 :(得分:1)

您的正则表达式相关代码没问题,但您调用该函数的方式是错误的:您需要使用Set

Dim regexResults As Object
Set regexResults = FindDateAndTimePatternRegEx("   Afgar 01-01-2017 00:24:00, anvendt log 01-01-2017 10:53:24 er 10:29:24 EFTER dette")

答案 1 :(得分:0)

您必须检查Execute是否可以找到某些内容。

Dim i As Integer
If arrMatch.Count = 0 Then
    Debug.Print "No match"
Else
    For i = 0 To FindDateAndTimePatternRegEx.Count - 1
        Debug.Print i; FindDateAndTimePatternRegEx.Item(i).FirstIndex
    Next i
End If