VBA学习笔记3:Inputbox的函数与方法

 问题来源:一个项目需要使用inputbox来获取用户输入值,如果用户点击了“取消”或者输入了未在备选里的值将自动退出程序。获取输入值我使用了num = inputbox(optfm)语句,接下来使用If num = false Then Exit Sub语句来退出。测试中却发现点击了“取消”程序并未退出,而是继续执行了后面的语句。搜索后发现,原来inputbox语句分“函数”和“方法”两种,其返回值不同,所以处理方式也不相同。

Inputbox函数,是VBA的内置函数,无论是在Excel、Word,任何使用VB脚本语言的程序都能使用,而Inputbox方法,完整写法是Application.Inputbox,是Excel这个App特有的,其语法与Inputbox函数稍有不同,是为Excel量身定做的。使用中,直接输入Inputbox就是函数的用法,使用“方法”的话就必须在前面加上Application.。

Inputbox函数和方法的主要区别

1.提示文字的限制不同。两个语句第一个参数均是提示文本,但是Inputbox函数的提示文本最大可以是1024个字符,而Inputbox方法最大是255个字符。两者均可在提示文本中使用Chr(10)换行符。

2.Inputbox方法多了一个Type参数,这个参数可以指定返回数据的类型,如果省略则默认返回文本。此参数在Excel很有用,如果使用参数8(range类型),则可以直接用鼠标选择对应的单元格区域。

3.此点最为重要,Inputbox函数如果用户选择"取消 ", 函数将返回一个零长度字符串 ("");而Inputbox方法用户选择“取消”,会直接返回 False。

引用微软的官方总结:

InputBox 方法与 InputBox 函数的区别在于,前者可以对用户输入进行选择性验证,并能与 Excel 对象、错误值和公式结合使用。

回到开头的问题,可以得出结论,如果使用了num = inputbox(optfm)语句,则后面判断用户是否“取消”要使用if num="" Then Exit Sub;如果使用num = Application.Inputbox(optfm),后面的判断应使用if num=False Then Exit Sub

2022年2月6日更新

有一个实例,要求通过输入框获取用户输入的数字,输入数字可以为0。先是用了Application.Inputbox方法,但是发现,系统会把用户输入的0判断为False,后面再用If X=false then exit sub的时候,输入0也会被退出。所以只能改用inputbox函数。需要注意的是,inputbox返回值是string类型,所以还要进行下Cbyte或者其他类型转换才能当成数字用。

评论