Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3456|回复: 14

[已解决]用VBA为什么inputbox会出错如何改

[复制链接]
发表于 2017-4-23 19:38 | 显示全部楼层 |阅读模式


用VBA为什么inputbox会出错如何改

运行下面这个VBA,为什么单击"取消" 会提示"类型不匹配"

如何改单击"取消" 不会出现错误提示


sub 加法计算器()
dim jiashu as integer
dim beijiashu as integer
dim he as integer
jiashu=inputbox("请输入加数","加法计算器")
beijiashu=inputbox("主伐输入被加数","加法计算器")
he=jiashu+beijiashu
msgbox "两数求和的结果为:" & he,vbokonly,"加法计算器"
end sub

最佳答案
2017-4-25 16:44
  1. sub 加法计算器()
  2. dim jiashu$,beijiashu$
  3. dim he as integer
  4. jiashu=inputbox("请输入加数","加法计算器")
  5. beijiashu=inputbox("主伐输入被加数","加法计算器")
  6. if isnumeric(jiashu) and isnumeric(beijiashu) then
  7.   he=jiashu*1+beijiashu*1
  8.   msgbox "两数求和的结果为:" & he,vbokonly,"加法计算器"
  9. else
  10.   msgbox "Error!"
  11.   exit sub
  12. end if
  13. end sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-4-23 20:05 | 显示全部楼层
input在点取消后会返回一个空字符串“”,而你定义的jiashu 是一个integer所以会报错类型不一致

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-4-23 21:19 | 显示全部楼层
lipenghui 发表于 2017-4-23 20:05
input在点取消后会返回一个空字符串“”,而你定义的jiashu 是一个integer所以会报错类型不一致

问题就要如何改
回复

使用道具 举报

发表于 2017-4-25 13:00 | 显示全部楼层
jiashu=val(inputbox("请输入加数","加法计算器"))
beijiashu=val(inputbox("主伐输入被加数","加法计算器"))

评分

参与人数 1 +9 收起 理由
laoau138 + 9

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-4-25 13:28 | 显示全部楼层
大灰狼1976 发表于 2017-4-25 13:00
jiashu=val(inputbox("请输入加数","加法计算器"))
beijiashu=val(inputbox("主伐输入被加数","加法计算器 ...

加个VAL有什么用

如果输入加数,或者被加数为空,直接退出程序如何
回复

使用道具 举报

发表于 2017-4-25 13:59 | 显示全部楼层
本帖最后由 327718098 于 2017-4-25 14:31 编辑
laoau138 发表于 2017-4-25 13:28
加个VAL有什么用

如果输入加数,或者被加数为空,直接退出程序如何

val函数是返回文本中的数值,比如文本文字返回0,“1234”返回1234,“1 2 3 4 ”返回1234,“1 2 a 3 4”返回12,遇到字母就停止。
Sub 加法计算器()
Dim jiashu As String, beijiashu As String
jiashu = InputBox("请输入加数", "加法计算器")
If jiashu = "" Then Exit Sub
beijiashu = InputBox("主伐输入被加数", "加法计算器")
If beijiashu = "" Then Exit Sub
he = Val(jiashu) + Val(beijiashu)
MsgBox "两数求和的结果为:" & he, vbOKOnly, "加法计算器"
End Sub

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-4-25 15:50 | 显示全部楼层
本帖最后由 大灰狼1976 于 2017-4-25 15:51 编辑
laoau138 发表于 2017-4-25 13:28
加个VAL有什么用

如果输入加数,或者被加数为空,直接退出程序如何


加入VAL()是把空字符转换成数值0。
空字符时退出程序的话,最简单的,前面加一句,on error goto 1,然后在end sub上一行输入行号1就行了。
并不建议使用,最好在前面判断一下inputbox是否为空字符,是的话exit sub即可。
回复

使用道具 举报

 楼主| 发表于 2017-4-25 16:06 | 显示全部楼层
327718098 发表于 2017-4-25 13:59
val函数是返回文本中的数值,比如文本文字返回0,“1234”返回1234,“1 2 3 4 ”返回1234,“1 2 a 3 4 ...

Sub 加法计算器()
Dim jiashu As String, beijiashu As String
jiashu = Val(InputBox("请输入加数", "加法计算器"))
If jiashu = "" Then Exit Sub
beijiashu = Val(InputBox("主伐输入被加数", "加法计算器"))
If beijiashu = "" Then Exit Sub
he = jiashu + beijiashu
MsgBox "两数求和的结果为:" & he, vbOKOnly, "加法计算器"
End Sub

'为什么val直接加到inputbox后

'分别输入7  8   结果不等于15    而等于78


回复

使用道具 举报

 楼主| 发表于 2017-4-25 16:12 | 显示全部楼层
大灰狼1976 发表于 2017-4-25 15:50
加入VAL()是把空字符转换成数值0。
空字符时退出程序的话,最简单的,前面加一句,on error goto 1 ...

写出来看不懂
回复

使用道具 举报

发表于 2017-4-25 16:20 | 显示全部楼层
本帖最后由 327718098 于 2017-4-25 16:33 编辑
laoau138 发表于 2017-4-25 16:06
Sub 加法计算器()
Dim jiashu As String, beijiashu As String
jiashu = Val(InputBox("请输入加数", " ...

因为变量声明时就是一个string的文本型变量,文本与文本用+号就相当于&,beijiashu = Val(InputBox("主伐输入被加数", "加法计算器")),虽然用VAL改变了inputbox里面的值,但这个值赋给变量beijiashu时任然会变为文本
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 17:57 , Processed in 0.256878 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表