创作声明:部分内容由AI辅助创作
数据的输入
网页上的输入框
招式15:输入框函数InputBox
在WPS的JS宏中,InputBox函数是一种用于与用户交互的输入工具,允许用户输入字符类型数据,并将文本框的内容以字符串的形式返回。
输入框函数InputBox
InputBox 基础语法如下:
InputBox::fn(Prompt:?,Title:string,Default:string,XPos:number,YPos:number) As string
参数说明:
Prompt(提示):必选,在弹框中显示与输入相关的提示信息。
Title(标题):可选,弹框的标题栏文本,默认为空。
Default(默认):可选,输入框的默认值,默认为空。
XPos(X位置):可选,水平位置,省略时水平方向居中。
YPos(Y位置):可选,垂直位置,省略时垂直方向居中。
以下是一个全参数的输入框代码示例,增加一条输出语句来显示输入的字符串。当输入框为空时点击确定、点击取消、点击关闭均返回空字符串,增加一个单分支判断语句来进行检验:
function 密码(){
var 输入=InputBox("请输入密码:","输入密码","A123456",0,0)
alert("输入的密码为:"+输入)
if(输入===""){
alert("输入为空,或者单击了取消、关闭")
}
}
显示所输入的字符串
输入为空时点击确定;点击取消;点击关闭
复合判断条件式执行的显示语句
招式16:Application对象的InputBox方法
其实在WPS的JS宏中更经常用到的是Application对象的InputBox方法,会更加方便,其基础语法如下:
Application.InputBox: fn(Prompt:string,Title:?,Default:?,Left:?,Top:?,HelpFile:?,HelpContextID:?,Type:?) As ?
前6个参数与上面的InputBox函数类似,第6、7个参数很少使用。
使用DeepSeek查询的关于Type 参数的含义不尽相同,并不适用于我电脑上的版本。对于这种查不到准确资料的情况,可以参考查到的VBA或Javascript相关内容,通过执行下列代码实际测试,并自行总结和发现规律。
测试
将Type参数用变量i来代替,每次循环递增1次,并在立即窗口输出i的值、输入数据内容、输入数据的类型。代码如下:
function 输入类型测试(){
for(i=0;i<=16;i++){
var 输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,i)
Debug.Print("参数为"+i+":",输入,typeof(输入))
}
}
当执行到第8次时,无法按确定键,只能按取消键,当时的屏幕提示如下:
执行第8次时,提示应该输入引用
执行完16次循环后的屏幕截图如下:
据此总结出我电脑上Type参数的含义如下:
参数0,返回公式,字符串类型;
参数1,返回数字,数值类型;
参数2,返回文本,字符串类型;
参数4,返回逻辑值,布尔类型;
参数8,待定。(返回的false是按取消键产生的);
参数16,3(不知道什么意思),数值类型。
查VBA的Type参数定义,证明JS宏为了确保与VBA的兼容性,参数解释相同,而DeepSeek并不掌握这一情况,所以:
参数8,返回单元格引用,Range对象;
参数16,错误值的代码,数值类型。
可以用以下代码来验证,将循环语句注释掉,添加type为8和16的两条语句。查询VBA或JS宏中常见的错误类型:
function 输入类型测试(){
// for(i=0;i<=16;i++){
// var 输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,i)
// Debug.Print("参数为"+i+":",输入,typeof(输入))
// }
输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,8)
Debug.Print("参数为8:",输入.Address(),typeof(输入))
输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,16)
Debug.Print("参数为16:",输入,typeof(输入))//
}
Type参数为8时,只有输入单元格引用时会显示输出内容:
输入:A1:D5。输出:参数为8: $A$1:$D$5 function
常见错误值及触发场景
Type参数为16时,只有输入正确的错误值会显示输出内容,错误的错误值显示3:
输入:#N/A。输出:参数为16: 7 number
输入:#VALUE!。输出:参数为16: 3 number
输入:#REF!。输出:参数为16: 4 number
输入:#DIV/0!。输出:参数为16: 2 number
输入:#NUM!。输出:参数为16: 6 number
输入:#NAME?。输出:参数为16: 5 number
输入:#NULL!。输出:参数为16: 1 number
输入:#GETTING_DATA。输出:参数为16: 3 number(不支持的错误值)
#N/A | ErrorType.NA | 查找函数(如 VLOOKUP)未找到匹配值 |
#VALUE! | ErrorType.Value | 函数参数类型不匹配(如文本转数字失败) |
#REF! | ErrorType.Ref | 单元格引用无效(如删除被引用的区域) |
#DIV/0! | ErrorType.Div0 | 除以零操作(如 =1/0) |
#NUM! | ErrorType.Num | 数值计算错误(如负数的平方根) |
#NAME? | ErrorType.Name | 公式中存在未识别的函数或名称 |
#NULL! | ErrorType.Null | 区域交集运算符使用不当 |
#GETTING_DATA | ErrorType.GettingData | 数据加载未完成(如外部数据源) |
总的来说,通过合理利用 InputBox,可以快速实现用户交互功能,提升脚本的灵活性。建议结合具体需求,推荐采用Application对象的InputBox方法,可以通过选择合适的 Type 参数以增强输入验证。返回值是用户输入的内容(根据 Type 转换为对应类型)。若用户点击取消或关闭弹窗,返回 false。
为了增加动手能力,通过AI助手可以获得关于该函数和方法的许多示例代码,比较简单,不再详细讲解,以免啰嗦。
认真听我说!