WPS宏编辑器API参考关于函数列举了3个:DoEvents、InputBox和MsgBox,其中DoEvents有点不好理解,应该在什么场景下使用也缺乏官网指导说明,因此本文重点讲述InputBox和MsgBox的使用说明。
1、DoEvents
处理进程的消息队列中的消息。
DoEvents 将暂时停止当前的宏执行,在处理完进程的消息队列中的消息后返回再继续宏的执行。
function abcd()
{
var beginTime = new Date();
for (i = 0; i < 20000; i++)
{
Selection.TypeText("金山办公软件");
if (i % 1000 == 0)
DoEvents()
}
var endTime = new Date();
Debug.Print("用时共计"+(endTime-beginTime)+"ms");
}
此示例使用 DoEvents 函数来使得每迭代 1000 次循环就将暂时停止当前的宏执行,处理完进程的消息队列中的消息后返回再继续宏的执行,以便迭代过程中在合适的时机更新文档视图或者响应鼠键消息来通过调试器中止迭代。
上述为wps开放平台关于DoEvents的描述,确实比较晦涩难懂,使用频率较低,因此不做详细讲解,只是给大家3个建议:
- 官方案例的代码是基于word宏编辑器的,因此用excel表格宏编辑器执行案例代码会报错:TypeText是一个未定义的函数;
- DoEvents可以等同理解sleep(0),sleep函数相信写过多线程的很熟悉;
- 遇到js宏执行很卡的时候,不妨试用DoEvents看看效果;
2、InputBox
弹出显示自定义提示信息的输入对话框,等待用户在输入框中输入文本或单击按钮,然后返回输入框的内容。
1)语法
InputBox (prompt, [ title ], [ default ], [ xpos ], [ ypos ])
2)参数说明
名字 | 说明 |
---|---|
prompt | 必需项。 在对话框中显示的消息的字符串表达式。 |
title | 可选。 对话框标题栏中显示的字符串表达式。 如果省略 title,则标题栏中将显示应用程序名称。 |
default | 可选。 输入框默认值。 |
xpos | 可选。 指定对话框的左边缘与屏幕的左边缘的水平距离(以缇为单位)的数值表达式。 如果省略了 xpos,对话框将水平居中。 |
ypos | 可选。 指定对话框的上边缘与屏幕的顶部的垂直距离(以缇为单位)的数值表达式。 如果省略了 ypos,对话框将将垂直居中。 |
3)返回值
如果用户选择"确定 " 或按 Enter,InputBox 函数将返回文本框中的内容。 如果用户选择"取消 ", 函数将返回一个空字符串 。
4)案例
案例1:除prompt外,其他都是默认值
function inputBox1()
{
var rst = InputBox("请输入姓名:");
Debug.Print("name: " + rst + ", " + (rst == ''));
}
返回结果:
- 点击确定时,返回张三
- 点击取消时,返回空字符串
案例2:设置输入框标题
function inputBox2()
{
var rst = InputBox("请输入姓名:", "老马历写记");
Debug.Print("name: " + rst + ", " + (rst == ''));
}
案例3:设置输入框默认值
function inputBox3()
{
var rst = InputBox("请输入姓名:", "老马历写记", "我来也");
Debug.Print("name: " + rst + ", " + (rst == ''));
}
3、MsgBox
弹出消息对话框,等待用户单击按钮,并返回一个整数,指示用户单击的哪个按钮。
1)语法
MsgBox (prompt, [ buttons, ] [ title, ] )
2)参数说明
名字 | 说明 |
---|---|
prompt | 必需项。 在对话框中显示的消息的字符串表达式。 |
button | 可选。 数值表达式,用于指定要显示按钮的数量和类型、要使用的图标样式、默认按钮的标识和消息框的形式的值(JSMsgBoxStyle)之和。 如果省略,则 buttons 的默认值为 0。 |
title | 可选。 对话框标题栏中显示的字符串表达式。 如果省略 title,则标题栏中将显示应用程序名称。 |
3)返回值
返回JSMsgBoxResult 枚举值。表示用户点击MsgBox弹出消息框的按钮。在点击MsgBox弹出消息框之前不会返回。如果对话框中显示“取消”按钮,按 ESC 键与单击“取消”具有相同的作用。
4)JSMsgBoxStyle枚举
名称 | 值 | 说明 |
---|---|---|
jsOKOnly | 0 | 仅显示“确定”按钮。 |
jsOKCancel | 1 | 显示“确定”和“取消”按钮。 |
jsAbortRetryIgnore | 2 | 显示“中止”、“重试”和“忽略”按钮。 |
jsYesNoCancel | 3 | 显示“是”、“否”和“取消”按钮。 |
jsYesNo | 4 | 显示“是”和“否”按钮。 |
jsRetryCancel | 5 | 显示“重试”和“取消”按钮。 |
jsCritical | 16 | 显示“关键消息”图标。 |
jsQuestion | 32 | 显示“警告查询”图标。 |
jsExclamation | 48 | 显示“警告消息”图标。 |
jsInformation | 64 | 显示“信息消息”图标。 |
jsDefaultButton1 | 0 | 第一个按钮是默认按钮。 |
jsDefaultButton2 | 256 | 第二个按钮是默认按钮。 |
jsDefaultButton3 | 512 | 第三个按钮是默认按钮。 |
jsDefaultButton4 | 768 | 第四个按钮是默认按钮。 |
jsApplicationModal | 0 | 应用程序模式;用户在继续在当前应用程序中工作前必须响应消息框。 |
jsSystemModal | 4096 | 系统模式;在用户响应消息框前,所有应用程序都挂起。 |
jsMsgBoxHelpButton | 16384 | 在消息框中添加“帮助”按钮。 |
jsMsgBoxSetForeground | 65536 | 将消息框窗口指定为前景窗口。 |
jsMsgBoxRight | 524288 | 文本右对齐。 |
jsMsgBoxRtlReading | 1048576 | 指定文本在希伯来语和阿拉伯语系统中应从右到左显示。 |
5)JSMsgBoxResult 枚举
名称 | 值 | 说明 |
---|---|---|
jsOK | 1 | 确定 |
jsCancel | 2 | 取消 |
jsAbort | 3 | 中止 |
jsRetry | 4 | 重试 |
jsIgnore | 5 | 忽略 |
jsYes | 6 | 是 |
jsNo | 7 | 否 |
6)案例
案例1:默认对话框,类似alert框
function msgbox1() {
var rst = MsgBox("这是一个最简单的Msgbox框!");
Debug.Print("rst= " + rst);
}
- buttons参数省略,默认0(jsOKOnly),仅显示确定按钮。
- 点击确定按钮,返回1
- 点击对话框的x按钮,也返回1
案例2:是否选择框+问号提示
function msgbox2() {
var msg = "该操作会持续几分钟,确定继续吗?";
var buttons = jsOKCancel + jsQuestion + jsDefaultButton1
var rst = MsgBox(msg, buttons);
Debug.Print("rst= " + rst);
}
- jsOKCancel 确定取消按钮
- jsQuestion ,问号图标
- jsDefaultButton1,默认选中第一个按钮,确定按钮
- 返回结果,点击确定返回1(jsOK),点击取消返回2(jsCancel),具体请查看JSMsgBoxResult 枚举
- 点击对话框的x按钮,返回2
案例3: 设置标题
function msgbox3() {
var msg = "XX程序升级过程中发生异常,如需解决请执行下述操作:\n中止:结束程序;\n重试:再次升级;\n忽略:继续下一步";
var title = "3个按钮演示";
var buttons = jsAbortRetryIgnore + jsQuestion + jsDefaultButton3
var rst = MsgBox(msg, buttons, title);
Debug.Print("rst= " + rst);
}
- 设置了标题:3个按钮演示;
- 多行提示消息,使用\n进行换行;
- 使用了3个按钮
- 对话框返回值:jsAbort(3), jsRetry(4), jsIgnore(5)
- 点击对话框的x按钮,返回3
案例4:返回值如何使用
上文3个案例都提及了返回值,不管是点击了按钮或对话框的x按钮,都会有返回值,那么基于返回值一般我们作何处理呢?
function msgbox2() {
var msg = "该操作会持续几分钟,确定继续吗?";
var buttons = jsOKCancel + jsQuestion + jsDefaultButton1
var rst = MsgBox(msg, buttons);
Debug.Print("rst= " + rst);
if (rst == 1) {
Debug.Print("点击了,确定按钮");
} else {
Debug.Print("点击了,取消或关闭按钮");
}
}
- 点击了确定按钮,执行Debug.Print(“点击了,确定按钮”)输出