1

我正在尝试使用以下 VBA 验证表单字段的输入。这很好用。我的问题是这个 Access 应用程序创建了各种 XML 数据文件,我不希望该 xml 中的某些字符......即软返回(Shift+Enter)。我相信这个的 Chr 是 Chr(11),但我认为我不能只将 , Chr(11)) 添加到下面数组的末尾,这将起作用......我如何使用 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() 。

4

2 回答 2

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
于 2012-11-13T15:05:40.350 回答
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
于 2012-11-13T15:44:07.327 回答