2017-03-07 1 views
2

私は数日間、この問題で苦労されていると、基本的に私は結果を返すべきVBAで関数を書かれているソリューション戻る正規表現MatchCollection - エラー450

を見つけることができませんでしたRegEx.Executeステートメントから 'End Function'ステートメントに達するたびに、私はランタイムエラー450を取得し、オブジェクト変数の割り当てがエラーをスローしないので、何かがうまくいかない場所を特定できません。

私はVBAとプログラミングには全く新しいので、オブジェクト/ MatchCollection/Collectionsの振る舞いに誤解している可能性があります。私が返す期待値が、ときに関数を呼び出して、文字列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を使用して、イミディエイトウィンドウでこれを試してみる

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 

毎回:ここ

は私のコードですExit FunctionまたはEnd Functionのいずれかに達すると、実行時エラー450が発生する

何が問題になるか説明できますか?事前

おかげ

敬具

答えて

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

おかげWiktor第 - これが私の問題を解決しました! –

+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