2012-11-13 113 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