InputBox 是 VBA 里面非常常用的内置函数,主要作用就是弹出一个系统风格的弹窗,让用户手动输入内容,程序拿到用户输入的字符串之后继续执行后续代码,这个函数经常用在 Excel VBA Access VBA 里面,它最大特点是返回值默认是文本类型,就算用户输入数字,拿到的结果也是字符串,需要自己额外做类型转换,它支持自定义提示文字窗口标题默认值输入框宽度位置,还可以判断用户是点击确定还是取消按钮,很多新手容易踩坑,点击取消的时候返回空字符串,程序如果没有判断,后面运算就会报错,掌握基础语法参数返回值判断逻辑类型转换,就能熟练使用 inputbox 完成简易交互输入。
基础语法
InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
| 参数名称 | 是否必填 | 作用说明 |
|---|---|---|
| Prompt | 必填 | 弹窗里面显示的提示文字,可以换行 |
| Title | 选填 | 弹窗顶部标题栏文字,不写默认是 Microsoft Excel |
| Default | 选填 | 输入框里面预先填充的默认内容 |
| XPos | 选填 | 弹窗距离屏幕左边的坐标 |
| YPos | 选填 | 弹窗距离屏幕顶部的坐标 |
| HelpFile | 选填 | 帮助文件路径,配套帮助按钮 |
| Context | 选填 | 帮助主题编号 |
基础示例代码
Sub 基础 InputBox 示例 ()
Dim userInput As String
userInput = InputBox ("请输入你的姓名", "信息录入")
If userInput = "" Then
MsgBox "你点击了取消或者没有输入内容"
Else
MsgBox "你输入的是" & userInput
End If
End Sub
核心要点深度讲解
第一 返回值类型,inputbox 返回值固定是 String 文本类型,输入数字的时候,不能直接拿来做加减乘除,要用 CInt 或者 CDbl 转成数值,不然会类型不匹配报错。
第二 取消按钮的判定,用户点击取消,inputbox 同样返回空字符串,和用户什么都不输入直接点确定结果一样,如果业务上需要区分取消和空输入,单纯靠空字符串判断是做不到的,这个是 inputbox 本身的局限。
第三 Prompt 换行写法,在提示文字里面使用 vbCrLf 实现换行,适合长提示文本,弹窗排版不会挤成一行。
第四 数值输入完整示例
Sub 数值输入示例 ()
Dim num As Double
Dim strInput As String
strInput = InputBox ("请输入数字", "数值计算")
If strInput = "" Then
Exit Sub
End If
num = CDbl (strInput)
MsgBox num 2
End Sub
进阶用法
带默认值的 inputbox
userInput = InputBox ("请输入年份", "参数设置", "2026")
弹窗打开的时候输入框就已经显示 2026,用户可以直接修改或者保留默认值。
自定义弹窗位置,加上 XPos YPos 参数,控制弹窗弹出在屏幕指定坐标,单位是缇。
配合循环校验,用户输入不符合要求的时候,反复弹出 inputbox,直到输入合法内容,这个是实际项目很常用的写法。
常见错误清单
错误 1 忘记接收返回值,只写 InputBox,没有赋值给变量,弹窗虽然弹出来,但是输入的数据程序拿不到。
错误 2 直接拿返回字符串做数学运算,没有转换数值类型,触发类型不匹配错误。
错误 3 误以为 inputbox 可以输入多行文本,原生 inputbox 只支持单行输入,想要多行输入需要自定义用户窗体 UserForm。
错误 4 混淆 InputBox 和 Application.InputBox,Excel 里面 Application.InputBox 是 Excel 对象的方法,功能更强,可以限制输入类型,比如只能选单元格只能输入数字,和 VBA 原生 InputBox 不是同一个。
Application.InputBox 拓展对比
| 对比项 | VBA 原生 InputBox | Application.InputBox |
|---|---|---|
| 返回类型 | 永远字符串 | 可以指定类型,数字单元格区域公式等 |
| 取消判断 | 取消返回空字符串 | 取消返回 False |
| 适用场景 | 普通文本输入 | Excel 单元格选择限定类型输入 |
使用操作步骤
第一步 打开 Excel,按 Alt 加 F11 调出 VBA 编辑器
第二步 插入模块,新建 Sub 过程
第三步 声明字符串变量接收 inputbox 返回结果
第四步 编写 InputBox 函数,填写提示文字标题等参数
第五步 增加判断语句,判断返回是否为空,处理取消或者空输入
第六步 如果是数字,增加类型转换代码
第七步 按 F5 运行宏,测试弹窗交互效果
总结,inputbox 属于轻量级交互弹窗,适合简单单行输入,优点是代码简短不需要额外做窗体,缺点是功能有限,不能校验输入格式,不能区分取消和空输入,如果需要复杂交互,就改用 UserForm 窗体或者 Application.InputBox。
【常见问题】
问题 1 inputbox 点击取消之后程序为什么报错
回答 1 inputbox 点击取消会返回空字符串,如果代码没有判断空值,直接把这个空字符串拿去做数值运算,就会触发类型不匹配报错,使用 inputbox 的时候一定要增加空值判断。
问题 2 inputbox 输入数字为什么不能直接计算
回答 1 inputbox 原生返回值是文本字符串,就算输入阿拉伯数字,也属于文本格式,想要计算必须用 CDbl 或者 CInt 转换,这是 inputbox 最经典的易错点。
问题 3 inputbox 和 Application.InputBox 是同一个吗
回答 3 inputbox 是 VBA 内置函数,Application.InputBox 是 Excel 对象方法,两者不是同一个,Application.InputBox 支持限定输入类型,取消的时候返回 False,功能比原生 inputbox 更强。
问题 4 inputbox 能不能实现多行文字输入
回答 4 原生 inputbox 只支持单行输入,无法实现多行文本,如果需要多行输入,不能继续使用 inputbox,需要创建自定义 UserForm 用户窗体。
【免责申明】
本教程基于 Excel VBA 环境讲解 inputbox 用法,不同 Office 版本 VBA 行为基本一致,部分参数在其他宿主环境比如 Access 会有细微差异,代码仅作为演示参考,正式业务使用前请做好数据备份,运行宏需要开启宏权限,宏存在安全风险,请只运行可信代码。
