2016-11-28 97 views
1

我在寫一個小宏,它將遍歷工作表中的所有單元格,併爲特定的正則表達式測試列。我寫了一個簡單的正則表達式來比較輸入是否是字符串;如果是,那麼它應該忽略它,否則它應該將單元格格式化爲紅色。預期的輸出是錯誤內容的單元格應該變色。但是,VBA處理每個內容並將每個不正確的條目都傳遞給正確的。爲什麼輸入給定錯誤時,vba總是返回無錯誤?

這裏是我的代碼:

Dim RegEx As Object 
Set RegEx = CreateObject("VBScript.RegExp") 

     With RegEx 
       .Pattern = "/^[A-Za-z]+$/" 
       .Global = True 
       .IgnoreCase = True 

       If .Test(cell_value) Then 
        Cells.Item(num_rows, num_cols).Interior.ColorIndex = RGB(255, 0, 0) 

        MsgBox "Error" + cell_value 
       Else 
        MsgBox "No error" + cell_value 
       End If 
      End With 

它總是返回「沒有錯誤」,甚至不正確的輸入。任何提示?

+0

首先,我不認爲VBScript RegExp語法使用'/'字符來分隔正則表達式模板。其次,在你的代碼中,如果發現模式,測試將是真實的,錯誤將被返回,這似乎與你所要解釋的相反。 –

+0

@VincentG是的,你是對的。 VB正則表達式不使用/字符分隔正則表達式,是的你正確地得到它。 – Nevermore

回答

1

你知道,在你的例子中,每個單元格模式都會被標記爲錯誤,對嗎?更具體地說,如果在你的例子.Pattern = "A"中,字母爲Aa(感謝IgnoreCase = True)的每個單元格都會被標記爲錯誤,而不是休息。

如果這就是你的意圖,那麼你的模式肯定有問題。你發佈的腳本對我來說工作得很好。

+0

我使用的模式在某些方面不正確。從@ VincentG的評論中獲得了一些參考但是,它在格式化單元格時給了我一些錯誤。我會解決它。謝謝 – Nevermore

1

可以使用條件格式做到這一點(即沒有代碼)

作爲一個例子該條件格式返回TRUE僅如果字符串包含AZ

A被65
B爲90

因此,測試是通過比較每個字符是否具有64 & 90之間的值這些測試的總和爲字符串的長度。

=SUMPRODUCT(--((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64)), --(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91))=LEN(A1) 

我寫了這個早在2004年的另外一個問題,有人喜歡巴里霍迪尼可能使用Xl2013和xl2016新功能更好的解決方案。

+0

恕我直言,這是一個很好的建議。不過,我現在已經完成了我的代碼。無論如何感謝謙遜的建議。 – Nevermore