1

一开始是一个简单的验证代码,在我看来,它转换成非常自相矛盾的东西。

以下代码返回“干得好!” 当我在 InputBox 弹出窗口中输入负数时

Dim myvar As String

myvar = InputBox("input a positive number, please")

If IsNumeric(myvar) Then
    myvar = CDbl(myvar)
    Select Case myvar
    Case Is < 0
        MsgBox "I need a positive number"
    Exit Sub
    Case Is > 0
        MsgBox "Good work!"
        [MyField] = myvar
        RunCommand acCmdSaveRecord
        Me.Requery
    Exit Sub
    Case Else
        MsgBox "You entered '" & myvars & "'. I don't know what to do about"
    End Select
Else
    MsgBox "A Number, please"
End If

这真的是验证 InputBox 的最佳方式吗?

4

2 回答 2

3

由于myvaris a String,CDbl(myvar)将被隐式转换回字符串。为Select Case.

于 2012-06-28T12:54:39.753 回答
0

我同意其他一些答案。考虑重写这段代码(注意声明的第二个变量):

Dim myvar as String
Dim myDbl as Double

myvar = inputBox ("Input a positive number, please")

if isnumeric(myvar) then
    myDbl = cDbl(myvar)
else
    msgbox "Enter a number please"
    exit sub
end if


if mydbl <=0 then
    msgbox "I need a positive number"
else        'if mydbl > 0 then
    MsgBox "Good work!"
    [MyField] = myvar
    RunCommand acCmdSaveRecord
    Me.Requery
end if

这将通过占零并将单独的变量声明为双精度来解决您的问题。我认为 if 语句而不是 case 只是偏好。但现在想想你拥有的两个变量。

debug.print "MyVar is a string containing: " & myvar

debug.print cstr(cdbl(myvar)*2)    
'This forces myvar into a double(a number-type) to do math on it and then print it out

但是,如果您要重新运行第一次打印,您会看到 myvar 仍然是一个字符串,可以像字符串一样使用。在 VBA 中,与其他一些语言不同,变量只是您声明它们的内容。如果你想将它们用作其他东西,你必须声明另一个所需类型的变量。

TL;DR 将它们视为不同的容器。字符串是圆形盒子,双打是方形盒子。它们可能能够容纳类似的东​​西,但容器的功能受到它们的形状的限制。在 VBA 中,您没有办法将一个圆圈强制为一个正方形,因此您必须制作一个完整的第二个容器并将这些东西转移过来。

于 2012-06-28T23:55:42.137 回答