2013-08-20 69 views
0

你好我有一些問題,以獲得下面的正則表達式代碼工作。 我得到一個application-undefine或Object-Undefine錯誤Excel VBA正則表達式錯誤

文本框在用戶窗體上。

錯誤發生在行「Set allMatches = regEx.Execute(TextBox1.Text)」 不知道我錯過了什麼。

Dim regEx As Object 

Dim allMatches As Object 

Set regEx = CreateObject("VBScript.RegExp") 
With regEx 
     .IgnoreCase = True 
     .MultiLine = False 
     .Pattern = "\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2)[AM|PM]" 
     .Global = True 
End With 

Set allMatches = regEx.Execute(TextBox1.Text) 


If allMatches.Count <> 0 Then 
    result = allMatches.Item(0).submatches.Item(0) 
End If 
+0

只是一個瘋狂的想法。 TextBox1.Text是否有效?你能成功地做一個MsgBox嗎? – asantaballa

+0

什麼版本的Excel和您使用的是什麼文本框控件? IE瀏覽器的ActiveX – Sorceri

+0

該文本框只是在一個窗體上,是的,我可以訪問一個MsgBox,並且我正在使用Excel 2010與XP – Mike

回答

0

所以有可能您正在錯誤地訪問文本框。不知道如何設置文本框,我會猜測它保存在shapes集合中。你可以尋找文本框,然後設置allMatches如下面

Dim shp As Shape 
'loop through the shapes on the sheet - assuming you are working with sheet 1 
For Each shp In ThisWorkbook.Sheets(1).Shapes 
    If shp.Name = "TextBox1" Then 
     Set allMatches = regEx.Execute(shp.TextFrame2.TextRange.Text) 
    End If 
Next 
+0

嗨,Sorceni,文本框放置在它沒有嵌入任何框架或形狀.. – Mike

1

一些谷歌上搜索,尋找確定後,我發現這個問題: 其與模式:

.pattern = "\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2**)** [AM|PM]" 

原來你如果模式無效,將得到5017錯誤。

通過將「)」更改爲正確關閉「}」錯誤已解決。

.pattern = "\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2**}** [AM|PM]" 

我會想,如果模式不匹配,那麼你會得到一個錯誤的回報,沒有那麼..

+0

非匹配模式和語法無效模式之間可能存在差異。這聽起來像你有後者,但解決你自己的問題很好! –