为什么Val(oldP)在oldP =“32”时得到1?

时间:2010-08-27 06:16:15

标签: ms-access vba

我有一个旧字符串oldString="abc-2"我要将其更改为"abc-3" 所以我这样做了

myArray = Split(oldString, "-")
oldP = myArray(UBound(myArray))
myArray(UBound(myArray))= Str(val(oldP) + 1)
newString=join(myArray,"-")

为什么我的错号码? 如果我尝试使用Cint(),那么我得到了错误。

请帮忙......

只是发现了真正的问题。 我意外地改变了我的输入模式并将一个“双字节”数字2放入同一个字段中,在那里我得到了另一个记录的旧字符串。之后CInt认为我的旧串是错误的类型。似乎ms-Access隐式地改变了该字段的编码,因此Cint不知道该怎么做而Val得到错误的值。 他们应该在Access中创建Textfield,所有编码独立的字符串函数,或全部使用UTF-8。 至少它应该在更改该文本字段的编码时发出警告。 也许我应该向MS报告?

1 个答案:

答案 0 :(得分:0)

如果您的关节功能运作良好,一切都应该没问题。您可以尝试的是:

在Access中打开VBA,然后打开立即窗口(查看 - >立即窗口)然后逐个执行这些linese并发布结果。

oldString="abc-2"
myArray = Split(oldString, "-")
oldP = myArray(UBound(myArray))
?oldP

这应该是 2 作为?oldP

的答案
myArray(UBound(myArray))= Str(val(oldP) + 1) 
?myArray(1)

这应该提示 3

newString=joint(myArray,"-")
?newString

这应该提示“abc-3”