2017-03-07 2 views
2

Ich habe seit ein paar Tagen mit diesem Problem zu kämpfen und habe im Grunde nicht in der Lage gewesen, eine LösungReturn RegEx Match von Funktion in VBA - Fehler 450

ich eine Funktion in VBA geschrieben habe, zu finden, die das Ergebnis zurückgeben sollte aus einer RegEx.Execute-Anweisung, aber jedes Mal, wenn die Anweisung 'End Function' erreicht wird, bekomme ich einen Laufzeitfehler 450 und ich kann einfach nicht herausfinden, wo etwas schief geht, da meine Zuweisung von Objektvariablen keinen Fehler verursacht.

Ich bin neu in VBA und Programmierung insgesamt, also gibt es wahrscheinlich nur etwas, was ich missverstanden habe in der Art, wie sich Objekte/MatchCollection/Collections verhalten.

Hier ist mein Code:

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 

Jedesmal, wenn ich versuchen, diese in dem Direkt-Fenster die Funktion aufrufen und die

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

die debug.print s Zeichenfolge mit gibt die erwarteten Werte aber wenn entweder Exit Function oder End Function ist erreicht, bekomme ich den Laufzeitfehler 450

Kann jemand erklären, was schief geht?

Vielen Dank im Voraus

Mit freundlichen Grüßen

Antwort

1

Ihre regex bezogenen Code ist in Ordnung, aber die Art und Weise Sie die Funktion aufrufen, ist falsch: Sie Set verwenden müssen:

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

Dank Wiktor - das hat mein Problem gelöst! –

+1

Sorry, natürlich - ich habe die Antwort jetzt akzeptiert. Immer noch lernen, wie man im Forum navigiert –

0

Sie müssen prüfen, ob die Execute etwas finden konnte.

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