2012-11-13 115 views
1

我想使用下面的VBA驗證表單字段的輸入。這工作得很好。我的問題是這個Access應用程序創建了各種XML數據文件,並且我不希望某些字符在該xml中......即軟返回(Shift + Enter)。我相信這個Chr是Chr(11),但我不認爲我可以將Chr(11))添加到下面的數組的末尾,這將起作用...我如何使用Chr(# )在鏈接方式?MS Access 2007 VBA:使用VBA和Chr驗證文本字段()

Dim i, j As Integer 
dim myField as variant 

varNo = Array("\", "/", ":", "*", "?", """", "<", ">", "|") 

If IsNull(Me.FieldValue) = False Then 
    myField = Me.FieldValue 
    For i = 0 To UBound(varNo) 
    j = InStr(1, myField , varNo(i)) 
    If j > 0 Then 
     MsgBox "Cannot use character:" & Chr(13) & Chr(10) & Chr(13) 
     & Chr(10) & varNo(i), vbCritical, " Illegal Character" 

     Exit Sub 
     Exit For 
    End If 
    Next 
End If 

再次,上述工作對數組中的這些東西很好,但我也想包括Chr()。

+0

我想你可能是用正則表達式,併爲您允許哪些檢查,這似乎包括比字母數字多一點。 – Fionnuala

+0

你可以有另一個數組數組並檢查instr爲chr(numarray(i)) – Fionnuala

+0

@Remou ...我明白了。也許這是要走的路,只是不知道RegEx或如何取消,但我很欣賞方向。我真的只想讓字母數字字符。 – Justin

回答

1

您可以使用空字符串作爲新的最後一個元素來構建數組,然後將最後一個元素的值更改爲Chr(11)

varNo = Array("\", "/", ":", "*", "?", """", "<", ">", "|", "") 
varNo(UBound(varNo)) = Chr(11) 

其實,我不確定爲什麼應該有必要。這適用於我...

varNo = Array("\", "/", ":", "*", "?", """", "<", ">", "|", Chr(11)) 

根據評論,我認爲這將有助於確認您正在評估的文本實際上包含您期望的字符。將文本輸入到此過程並在立即窗口中檢查其輸出。

Public Sub AsciiValues(ByVal pInput As String) 
    Dim i As Long 
    Dim lngSize As Long 
    lngSize = Len(pInput) 
    For i = 1 To lngSize 
     Debug.Print i, Mid(pInput, i, 1), Asc(Mid(pInput, i, 1)) 
    Next 
End Sub 
+0

@Hans ...已經有一段時間了。你好嗎?所以這將工作,除非我想添加多個權利? – Justin

+0

也我似乎沒有抓住它與此....或不知道爲什麼,但訪問似乎並不像它知道它那裏?更正:如果我在最後添加一個非法的chr,msgbox會顯示該值,例如:所以它可以看到它,但上面的內容不會導致j變量變爲1,只是評估軟回報....我可以看到帶箭頭符號的奇怪圓圈,這最終在編輯上的xml – Justin

+0

上:真的!?!我無法讓它爲我工作......它有一個設置或我錯過了什麼?感謝您的幫助btw – Justin

1

這裏是另一種方式的幾個注意事項:

'' Microsoft VBScript Regular Expressions library 
'' or CreateObject ("VBScript.RegExp") 

Dim rex As New RegExp 

With rex 
    .MultiLine = False 
    .Global = True 
    .IgnoreCase = False 
End With 

'A line for testing 
sLine = "abc" & Chr(11) 

'Anything that is NOT a-zA-Z0-9 will be matched 
rex.Pattern = "[^a-zA-Z0-9]" 
If rex.Test(sLine) Then 
    Debug.Print "Problem: include only alpha numeric" 
End If 
+0

非常感謝上述Remou ....一個最後的問題....你知道一個很好的資源來學習簡單的模式方面嗎?就像我想爲上面可接受的東西添加空格一樣?感謝您的幫助 – Justin

+0

您可以從這裏開始:http://www.regular-expressions.info/reference.html – Fionnuala

+0

@Justin您的Access應用程序創建XML文件。當這些文件包含不需要的字符時,是否需要通知用戶? IOW,丟棄(或替換)不需要的字符是否合理?如果是這樣,看看正則表達式替換方法。 http://www.regular-expressions.info/vbscript.html – HansUp