【问题标题】:vba double error inputbox stringvba双重错误输入框字符串
【发布时间】:2018-02-15 16:54:36
【问题描述】:

我在 Excel 中使用带有 activex 控件的 VBA 我有这个代码来计算两个值的平均值

Private Sub CommandButton1_Click()
Dim a, b, average As Double
a = InputBox("insert number a")
b = InputBox("insert number b")
average = (a + b) / 2
MsgBox (average)
End Sub

它返回一个错误的值,因为 + 被认为是字符串的连接而不是两个双精度的总和。 例如,如果我输入 a=4 和 b=5,则结果为 22.5 (45/2)。

如果修改变量声明如下,问题就解决了,只是 一个一个地声明变量

Private Sub CommandButton1_Click()
Dim a  As Double
Dim b As Double
Dim average As Double
a = InputBox("insert number a")
b = InputBox("insert number b")
average = (a + b) / 2
MsgBox (average)
End Sub

发生了什么事?

【问题讨论】:

    标签: vba sum double string-concatenation


    【解决方案1】:

    InputBox 以字符串形式返回,因为你把这样的东西变暗了

    Dim a, b, average As Double
    

    abVariants,而不是 Double

    所以他们被InputBox转换为String

    将平均计算更改为:

    average = (val(a) + val(b)) / 2
    

    这会将字符串转换为数字,然后添加它们。

    注意:当使用 InputBox 并且您期望数字时,您也需要对其进行一些检查,以防有人输入非数字的内容,因为 Val 会将非数字文本转换为 @987654332 @

    【讨论】:

      【解决方案2】:

      在 VBA 中,如果您在一行中“调暗”多个变量,则必须明确指定每个变量的类型。如果不这样做,变量将获得类型“Variant”。

      所以在这一行:

      Dim a, b, average As Double
      

      ab 是 Variant 类型,只有 average 是 Double 类型。 (变体意味着 VBA 会猜测使用哪种数据类型。)但是

      Dim a as Double, b As Double, average As Double
      

      将按照您的意愿工作,与您的第二个代码示例相同。这正是二十多年前 VBA 的设计方式......

      【讨论】:

      • @GiovanniScardoni 很高兴有帮助。由于您是 StackOverflow 的新手:为了帮助可能有类似问题的其他人,并感谢那些投入时间编写答案的人,您应该 1) 为您认为有帮助的任何答案投票并 2) 单击复选标记您认为您提出的任何问题的“答案”的贡献的左侧:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 2012-11-17
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多