Excel InputBox将十进制条目与字符串混淆
我试图使用InputBox函数来让用户输入数据。但是,数据主要由十进制值组成。当我测试我的程序并减去两个值时,这两个值都是从InputBox输入的,它不会执行数学运算Excel InputBox将十进制条目与字符串混淆,excel,vba,Excel,Vba,我试图使用InputBox函数来让用户输入数据。但是,数据主要由十进制值组成。当我测试我的程序并减去两个值时,这两个值都是从InputBox输入的,它不会执行数学运算 thckmax = InputBox("What is the maximum nominal thickness?", "Enter Max Nominal Thickness Measurement") thckmin = InputBox("What is the minimum nominal thickness?", "
thckmax = InputBox("What is the maximum nominal thickness?", "Enter Max Nominal Thickness Measurement")
thckmin = InputBox("What is the minimum nominal thickness?", "Enter Min Nominal Thickness Measurement")
thcknom = (thckmax + thckmin)
如果分别输入.05和.04,则会将前面的代码显示为:
thcknom is .05.04
我试图对这两个变量进行加法运算;然而,它只是将这两个字符串并排“相加”。如何解决此问题?您需要将变量声明为
Double
或Single
,具体取决于预期的输入:
Sub t()
Dim thckmax As Double, thckmin As Double, thcknom As Double
thckmax = InputBox("What is the maximum nominal thickness?", "Enter Max Nominal Thickness Measurement")
thckmin = InputBox("What is the minimum nominal thickness?", "Enter Min Nominal Thickness Measurement")
thcknom = (thckmax + thckmin)
Debug.Print thcknom
End Sub
有关更多信息,请参阅
另外,我建议将Option Explicit
添加到模块的最顶端,这将强制您声明所有变量。InputBox允许您声明。由于未指定,因此使用默认值,即文本。差不多
thckmax = Application.InputBox(Prompt:="What is the maximum nominal thickness?", Type:=1)
保证您得到一个数字,最终防止十进制符号混淆。您是否将变量声明为双精度还是单精度?如果你不申报,这可能会发生。认为用户应该输入0.05,而不是。05@damian我将它们声明为变量,这本应允许我输入任何数据类型,但我可以看出它可能会变得混乱,尤其是在小数之前没有零的情况下。我假设使用
变量时,使用InputBox()
,然后它将假定它是一个字符串
,这就是+
简单地将两者连接起来的原因。此外,一些令人惊讶的好讨论来自这个问题,干得好!编辑:是的,Dim tst as Variant//tst=InputBox(“什么?”)//debug.print TypeName(tst)
为Hi
、3
和0.03
的输入返回String
。除了OP使用InputBox
,它解析为VBA.Interaction.InputBox
函数,它不是Excel.Application.InputBox
。如果您想要Application.InputBox
,则必须明确限定它。@A.Jones-这是一个好习惯。仅供参考,您可以让VBA自动添加它,请参见。它还有助于防止任何键入错误,因此如果以后在代码中意外键入thickmax
,它会提醒您未声明它,而不是运行代码,然后在到达该行时抛出错误。不指定option explicit的问题是它不会在该行抛出错误,相反,在其他完全无关的地方(如果有的话)-因为隐式变量通常可以保存任何东西,所以代码可以愉快地使用无效数据运行,并且错误可能会在远离其源的地方突然出现,这使得问题比应该的更难调试-而使用Option Explicit,它不是在运行时的某个地方失败,而是在编译时失败,甚至在单个语句开始运行之前。早退总是好的!(CC@A.Jones)更不用说,花3个小时搔头,却发现“哦,这是个打字错误”=)@A.Jones如果空值是合法输入,你需要从取消中分辨出来,那么使用VBA标准库(不是Excel)中的InputBox
,如果取消,则返回的字符串将具有StrPtr
值0。如果不需要区分空输入的取消,则将其与类型的默认初始值(“/0”)@A.Jones进行比较,您试图将返回值强制转换为double,但函数返回的字符串可能会隐式转换为double,也可能不会隐式转换为double;类型不匹配是在赋值时,而不是在比较时。将inputbox包装到它自己的双返回函数中,以抽象出接收字符串的管道、验证字符串是否为数字、尝试cdbl转换等等。。。我会假装我没有看到