Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel InputBox将十进制条目与字符串混淆_Excel_Vba - Fatal编程技术网

Excel 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?", "

我试图使用InputBox函数来让用户输入数据。但是,数据主要由十进制值组成。当我测试我的程序并减去两个值时,这两个值都是从InputBox输入的,它不会执行数学运算

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转换等等。。。我会假装我没有看到