vba双错误输入框字符串

时间:2018-02-15 16:54:37

标签: vba sum double string-concatenation

我在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

它返回一个错误的值,因为+被认为是字符串的串联而不是两个double的总和。 例如,如果我输入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

发生了什么事?

2 个答案:

答案 0 :(得分:0)

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

Dim a, b, average As Double

abVariants,而不是Double

所以它们会被String转换为InputBox

将平均计算更改为:

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

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

注意:当使用InputBox并且您期望数字时,您也希望在他们输入非数字的内容时进行一些检查,因为Val将转换为非数字文字到0

答案 1 :(得分:0)

在VBA中,如果你" Dim"在一行中有多个变量,您必须明确给出每个变量的类型。如果你不这样做,变量就会得到类型" Variant"。

所以在这一行:

Dim a, b, average As Double

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

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

可以按照您的意愿工作,与第二个代码示例相同。它就像VBA的设计方式,大约二十多年前......