我一直在努力解决这个问题几天,基本上找不到解决方案
我已经在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
有人可以解释出了什么问题吗?
提前致谢
祝你好运
答案 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