我在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
发生了什么事?
答案 0 :(得分:0)
InputBox
以字符串形式返回,因为你把这样的东西变暗了
Dim a, b, average As Double
a
和b
为Variants
,而不是Double
所以它们会被String
转换为InputBox
。
将平均计算更改为:
average = (val(a) + val(b)) / 2
这会将字符串转换为数字,然后添加它们。
注意:当使用InputBox
并且您期望数字时,您也希望在他们输入非数字的内容时进行一些检查,因为Val
将转换为非数字文字到0
答案 1 :(得分:0)
在VBA中,如果你" Dim"在一行中有多个变量,您必须明确给出每个变量的类型。如果你不这样做,变量就会得到类型" Variant"。
所以在这一行:
Dim a, b, average As Double
a
和b
的类型为Variant,只有average
的类型为Double。 (Variant意味着VBA会猜测要使用哪种数据类型。)但是
Dim a as Double, b As Double, average As Double
可以按照您的意愿工作,与第二个代码示例相同。它就像VBA的设计方式,大约二十多年前......