ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 28161|回复: 25

[求助] 关于INPUTBOX点击取消的问题!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:14 | 显示全部楼层 |阅读模式
大家好,最近小弟在拜读罗刚君先生的《EXCEL VBA程序开发自学宝典》第二版。

对INPUTBOX有些疑问,比如附件中的程序。

当我在box出现时,点击取消,我知道会返回FALSE,即“0”,此时程序会执行msgbox以及goto star:

但是我觉得,如果用户要是点击取消了,就应该立即结束这个过程,而不是继续执行符合条件的语句。

所以请大家帮忙解决,谢谢!

另外,我尝试了一种解决办法,即在box返回为“0”时增加exit sub代码结束程序。
但是如果用户确实输入的就是“0”时,此时应该显示msgbox的错误提示,而不应该是结束程序!

谢谢大家了!


根据月份判断季度.rar

12.1 KB, 下载次数: 68

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:21 | 显示全部楼层
.....................

根据月份判断季度.rar

12.23 KB, 下载次数: 102

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:29 | 显示全部楼层
Application.InputBox 方法没有那么完美,不会区别取消和0,只能把它们都看作0了:
If Months = 0 Then Exit Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 17:36 | 显示全部楼层
首先感谢2楼和3楼的帮助!

@2楼,可能是我没有说清楚,我的问题是要区别对待“录入不符合要求的数值”和“取消”两种情况。
您的方法是将两种合并对待了,虽然不影响使用和理解,但是我更想从理论上解决这个问题。

@3楼,您的方法我想到了也。因为我是初学者,对inputbox了解还不是特别到位。
所以,如果像您说的“Application.InputBox 方法没有那么完美,不会区别取消和0,只能把它们都看作0了”
那我就不深究了

谢谢两位的热心帮助!

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:40 | 显示全部楼层
本帖最后由 wpxxsyzx 于 2012-5-26 17:42 编辑

用input语句
Sub 根据月份判断季度()
    Dim Months
Star:  '设置一个标签
    '弹出对话框让用户录入月份,默认为当前月份
    Months = InputBox("请输入月份,只能是数字", "月份")

'    Months = Application.InputBox("请输入月份,只能是数字", "月份", Month(Date), , , , , 1)
    '如果录入的数值小于1或者大于12则返回标签Star处继续执行
    If Months<>"" Then
    If Months < 1 Or Months > 12 Then MsgBox "只能在1到12之间": GoTo Star
    '四个IIF嵌套运用,其中每个IIF的第一参数使用双条件,在双条件时需要用And连接
    MsgBox IIf(Months >= 1 And Months < 4, "一季度", IIf(Months > 3 And Months < 7, "二季度", IIf(Months > 6 _
    And Months < 10, "三季度", IIf(Months > 9 And Months < 13, "四季度", "录入错误"))))
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:43 | 显示全部楼层
inputbox无论是函数还是方法,点击取消的时候是返回的不是0,是空字符串。。。

TA的精华主题

TA的得分主题

发表于 2012-5-26 17:54 | 显示全部楼层
测试附件:

根据月份判断季度.rar

12.47 KB, 下载次数: 136

TA的精华主题

TA的得分主题

发表于 2012-5-26 18:04 | 显示全部楼层
本帖最后由 zhaogang1960 于 2012-5-26 19:37 编辑
ctp_119 发表于 2012-5-26 17:43
inputbox无论是函数还是方法,点击取消的时候是返回的不是0,是空字符串。。。

5楼函数可行,函数只能返回字符串,取消返回空字符串
经测试Application.InputBox 方法(Type:=1)取消不会返回空字符串
请测试
Sub 根据月份判断季度()
     Dim Months
Star:   '设置一个标签
     '弹出对话框让用户录入月份,默认为当前月份

    Months = Application.InputBox("请输入月份,只能是数字", "月份", Month(Date), , , , , 1)
     '如果录入的数值小于1或者大于12则返回标签Star处继续执行
     If Months <> "" Then
        If Months < 1 Or Months > 12 Then MsgBox "只能在1到12之间": GoTo Star
        '四个IIF嵌套运用,其中每个IIF的第一参数使用双条件,在双条件时需要用And连接
        MsgBox IIf(Months >= 1 And Months < 4, "一季度", IIf(Months > 3 And Months < 7, "二季度", IIf(Months > 6 _
        And Months < 10, "三季度", IIf(Months > 9 And Months < 13, "四季度", "录入错误"))))
     End If
End Sub
根据月份判断季度.rar (14.38 KB, 下载次数: 69)

说明:此代码不是答案,只是为了说明Application.InputBox 方法(Type:=1)取消不会返回空字符串


TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 18:36 | 显示全部楼层
谢谢7楼的答案,根据您的程序,我的问题已经解决了!
另外,针对6楼的回答,我又看了看帮助文件以及写了程序进行测试,
对于您的说法,我得出了这样的结论,不知道对不对。
Application.InputBox:点击取消,返回的是FALSE
inputbox:点击取消,返回的是""

谢谢大家了!

TA的精华主题

TA的得分主题

发表于 2012-5-26 19:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xuchunyang 发表于 2012-5-26 18:36
谢谢7楼的答案,根据您的程序,我的问题已经解决了!
另外,针对6楼的回答,我又看了看帮助文件以及写了程 ...

经测试,Application.InputBox:点击取消,返回的FALSE不能作为判断依据,因为效果和输入0相同
请测试取消和输入0的效果
  1.     Sub 根据月份判断季度()
  2.     Dim Months As Variant
  3.     Months = Application.InputBox("请输入月份,只能是数字", "月份", 0, , , , , 1)
  4.     If Months = False Then MsgBox "取消或输入了0"
  5. End Sub

复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-13 04:25 , Processed in 0.039587 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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