JS宏进阶:控件与事件
在JS宏中,控件与事件是创建用户交互式应用程序的核心概念。与浏览器中的控件和事件有异曲同工之妙,在浏览器中,事件是用户与网页界面交互时发生的动作,而JS宏中,则是用户与WPS表格、文字等交互时发生的动作。
一、控件与窗体
控件是窗体上用于显示数据或接受用户输入的元素,而窗体是控件的容器,用于组织和显示用户界面。一个典型的窗体包含多个控件,这些控件共同为用户提供某种功能或信息展示。窗体可以基于用户操作显示或隐藏,可以承载其他控件如菜单、工具栏等。
1、常用控件介绍
文本框(TextBox):用户可以在其中输入相关文本
标签(Label):用于显示静态文本或图像
按钮(Button):用于触发事件
复选框(CheckBox):用于表示一个开关状态(选中或未选中)
选项按钮(OptionButton):用于一组互斥的选项
组合框(ComboBox):用于显示一个下拉列表供用户选择
列表框(ListBox):用于显示一个项目列表,用户可以选择一个或多个项目(理论上是这样,但JS宏有bug,只能选择一个)
下图所示就是WPS编辑器中的控件栏:
此外,表格中也有控件栏,如图所示:
2、窗体简介
在wps编辑器的工程中选中窗体,右键可以新建用户窗体,如下图所示:
随后将我们需要的控件,拖入窗体中,即可对窗体进行手动布局,当然,也可以通过宏代码对窗体中的控件进行布局。
3、窗体与控件的属性
窗体与控件的属性,我们可以直接在WPS编辑器中进行查看,如下图所示:
上图中,我们选中的是整个窗体对象,所以属性编辑器中出现的是窗体的属性。如果需要修改其中的属性,我们可以直接手动的在属性编辑器中进行修改,或者通过宏代码进行修改。如上图中,需要修改窗体的Height属性,可以直接在属性编辑器中的对应位置进行输入,也可以执行下面代码:
inputBox.Height = 100
注意:不是所有的属性,都能通过宏代码进行修改,部分属性只允许读取,例如窗体的Caption属性等。对于只读属性,若是强行修改,会抛出异常。我们可以查询官方文档来查询哪些属性是只读属性。如下表所示:
名称 | 说明 |
---|---|
BackColor | 返回或指定当前对象的背景颜色 |
BorderColor | 返回或当前对象的边框颜色,只读 |
Caption | 返回或指定用来识别或描述对象的显示在对象上的描述性文字,只读 |
Enabled | 指定该控件是否能接收焦点或者对用户生成的事件进行响应,只读 |
Font | 返回或指定对象的字体,只读 |
ForeColor | 返回或指定对象的前景颜色 |
Height | 返回或指定以像素点表示的对象的高 |
Left | 返回或指定控件到包含它的窗体的左边缘的距离 |
Name | 返回或指定控件或对象的名称,或与Font对象关联的字体对象的名称,只读 |
StartUpPostion | 返回或者指定UserForm第一次出现的位置 |
Top | 返回或指定控件到包含它的窗体的上边缘的距离 |
Width | 返回或指定以像素点表示的对象的宽 |
此外,窗体中还有四个常用方法:
名称 | 说明 |
---|---|
Controls | 返回控件的窗体、子窗体、报告或者区块的控件合集 |
Hide | 隐藏UserForm对象但不卸载该对象 |
Move | 将对象移动到参数指定的位置 |
Show | 显示一个用户窗体对象 |
注意:如果在窗体中添加了控件,那么,窗体中会新增对应的属性,来访问这些控件对象,或者通过Controls方法来访问其中的控件对象,例如访问inputBox中的文本框控件:
let textBox = inputBox.TextBox1; //TextBox1是该文本框控件的名称,这样返回的就是该文本框控件对象
let tb = inputBox.Controls("TextBox1"); //返回的也是该文本框控件对象
另外,文档中,明确标注只读的属性,只允许通过宏代码进行访问读取,不允许修改。如果要修改只能通过属性编辑器手动的去修改。
二、基本事件概述
我们直接在wps编辑器中选择对应的事件,也可以手动编写事件函数
如下图所示:
注意,事件函数都是全局函数。另外,对于事件的说明,官方文档也有详细介绍:
1、事件分类
工作簿事件(workbook):工作簿事件与工作簿对象的操作相关,例如打开、关闭、保存工作簿等。这些事件通常位于ThisWorkbook模块中。常见的工作簿事件包括(已标红):
名称 | 触发时机 |
---|---|
Activate | 该工作簿被激活时,将触发此事件。 |
AfterSave | 该工作簿被保存之后触发此事件。 |
BeforeClose | 该工作簿关闭之前触发此事件。 |
BeforePrint | 该工作簿打印之前触发此事件。 |
BeforeSave | 该工作簿保存之前触发此事件。 |
Deactivate | 该工作簿被切换到非激活状态时触发此事件。 |
NewSheet | 该工作簿中创建新工作表时触发此事件。 |
Open | 该工作簿打开时触发此事件。 |
SheetActivate | 当激活该工作簿任一工作表时触发 此事件。 |
SheetBeforeDelete | 删除该工作簿任一 工作表之前触发此事件。 |
SheetBeforeDoubleClick | 双击该工作簿任一工作表之前 触发此事件。 |
SheetBeforeRightClick | 右击该工作簿任一工作表之前 触发此事件。 |
SheetCalculate | 在该工作簿任一工作表进行 计算时触发此事件。 |
SheetChange | 当用户或外部链接更改了该工作簿任一 工作表中的单元格时触发此事件。 |
SheetDeactivate | 当该工作簿任一 工作表被切换到非激活状态时触发此事件。 |
SheetFollowHyperlink | 单击该工作簿任一 工作表的超链接时触发 此事 件。 |
SheetSelectionChange | 该工作簿任一工作表上的选定区域发生更改时,将触发此事件。 |
应用程序事件(Application):应用程序事件与Excel应用程序级别的操作相关,例如创建新工作簿、关闭应用程序等。常用事件如下表所示(已标红):
名称 | 触发时机 |
---|---|
NewWorkbook | 当新建工作簿时触发此事件。 |
SheetActivate | 当激活任一工作表时触发此事件。 |
SheetBeforeDelete | 当删除任一工作表之前触发 此事件。 |
SheetBeforeDoubleClick | 当双击任一工作表之前触发此事件。 |
SheetBeforeRightClick | 当右击任一工作表之前触发此事件 。 |
SheetCalculate | 在任一工作表进行计算时触发此事件。 |
SheetChange | 当用户或外部链接更改了任一工作表中的单元格时触发此事件。 |
SheetDeactivate | 当任一工作表被切换到非激活状态时 触发此事件。 |
SheetFollowHyperlink | 单击任一工作表的超链接时触 发此事件。 |
SheetSelectionChange | 任一工作表上的选定区域发生更改时,将触发此事件。 |
WindowActivate | 任一工作簿窗口被激活时,将触发此事件。 |
WindowDeactivate | 任一工作簿窗口被切换到非激活状态时 触发此事件。 |
WindowResize | 任一工作簿窗口调整大小时将触发此事件。 |
WorkbookActivate | 任一工作簿被激活时,将触发此事件。 |
WorkbookAfterSave | 任一工作簿被保存之后触发此事件。 |
WorkbookBeforeClose | 任一打开的工作簿关闭之前触发此事件。 |
WorkbookBeforePrint | 在打印任一打开的工作簿之前触发此事件。 |
WorkbookBeforeSave | 任一工作簿被保存之前触发 此事件。 |
WorkbookDeactivate | 任一工 作簿被切换到非激活状态时触发此事件。 |
WorkbookNewSheet | 在任一打开的工作簿中创建新工作表时触发此事件。 |
WorkbookOpen | 当打开一个工作簿时触发此事件。 |
窗体事件(UserFrom):用户窗体事件与用户窗体中的控件操作相关,例如按钮点击、文本框内容变化等。这些事件位于窗体的代码模块中。常见的用户窗体事件包括(已标红):
名称 | 触发时机 |
---|---|
Initialize | 在加载对象之后但在显示之前触发此事件 |
Terminate | 当通过将引用该对象的所有变量设置为 Nothing 或当对该对象的最后一个引用超出范围而从内存中删除对某个对象实例的所有引用时触发此事件 |
Click | 当用户在对象上按下然后释放鼠标按钮时触发此事件 |
DblClick | 当用户在系统的双击时间限制内在对象上按下并释放鼠标左键两次时触发此事件 |
MouseDown | 在用户按下鼠标按钮时触发此事件 |
MouseUp | 在用户释放鼠标按钮时触发此事件 |
MouseMove | 在用户移动鼠标时触发此事件 |
KeyUp | 当用户在窗体或控件具有焦点时释放键时触发此事件 |
KeyDown | 当用户在窗体或控件具有焦点时按下某个键时触发此事件 |
KeyPress | 当窗体或控件具有焦点时,当用户按下并释放对应于 ANSI 代码的键或组合键时触发此事件 |
控件事件:控件事件是通过窗体或工作表中的相关控件触发的,例如组合框事件、按钮事件等等。
详情请查阅官方网站:https://open.wps.cn/previous/docs/client/wpsLoad。下图红框中的控件事件都是常用事件。
2、事件函数的表示方法
事件函数是一个通过固定名称构成全局函数,通常已“事件类别_事件名称”来命名。例如:
//workbook中的Open事件
function Workbook_Open(){
//打开工作簿时执行的代码
}
//窗体中按钮1的点击事件
function inputBox_CommandButton1_Click(){
//点击窗体inputBox中按钮1要执行的代码
}
三、简单实例
function Workbook_BeforeClose(Cancel){
MsgBox('<p> 要关闭吗?<strong style="color: red;">小主</strong>。</p>', jsYesNo, "关闭提示词");
}
上述事件表示工作簿关闭之前弹出消息框,效果图如下所示: