引言
本人本次实践的目标是数据查询。具体实现方式应该是:
- 使用窗体及其他控件做查询的条件的输入
- 使用excel作为查询结果的输出
- 从桌面上看应该是,前面一个窗口输入查询条件,然后点确定,后面有个excel显示结果。
- 类似下图这种
一、打开窗口
窗体俗称对话框,在可视化的面向对象的编程软件中都应该有。在VBA中也有,可以打开 excel->开发工具
点开Visual Basic就会进入到变成界面,然后就可以插入窗体,如下图
二、窗体简介
窗体,也就是窗口,或者叫对话框,是vba定义的一个对象,或者说一类对象。微软对“Microsoft 窗体”对象的介绍就是下面一幅图
我们本节所说的”窗体“就是第二层(UserForm)。我们可以从图中看出,窗体对象,不止是指UserForm,还指其他的对象,如Controls,Font,MultiPage,等等。从面向对象的观点来说,这个图表示的应该是一个继承图。(我不是很熟,猜的) 如果上图是个继承关系图,那么我们可以得到几个结论:
- 他们的事件可以继承
- 他们的属性也可以继承
- 且儿子的属性和事件可能比父亲多。。。。
三、窗体属性简介
属性,表示这个窗体固有的特性,如基本的:长宽高,位置,颜色等;特殊的:如字体大小啊,有无滚动条啊等等
所以分下类:
- 基础属性:外观,位置,字体
名称 | 窗体名称 | 该窗体的标识 | 可能是唯一标识 |
BackColor | 背景色 | | |
BorderColor | 边框颜色 | | 只有BorderStyle为1时,这个才有效 |
BorderStyle | 边框类型(两种) | 0 fmBorderStyleNone 1 fmBorderStyleSingle | |
Caption | 窗体左上角显示的名字 | | |
Height | 窗体显示位置-高 | | |
Width | 窗体显示位置-宽 | | |
- 行为属性
Cycle | tab顺序指定控件接收焦点的顺序 | 0 fmCycleAllForms 2 fmCycleCurrentForm | 选0时,使用tab键,会遍历所有的该窗体范围内所有的控件;选1时,使用tab键,只会遍历某一窗体范围内的控件,tab不会跳出范围,到最后一个控件后会在回到该窗体范围的第一个控件 |
showmodal | 窗口是否锁死(这个词合适) | true false | 选true叫模态,false叫非模态 模态下,如果这个窗口是激活的,其他窗体或窗口则不能被选中。非模态,反之。 |
- 滚动条
ScrollBars | 滚动条 | 0 fmScrollBarsNone 1 fmScrollBarsHorizontal 2 fmScrollBarsVertical 3 fmScrollBarsBoth | 0 无 1 水平 2 垂直 3 全部 |
ScrollHeight ScrollTop | 滚动条高 | height有值,top才填值 | 只有当ScrollHeight值大于窗体本身的height时,滚动条才会显示。这个时候Top表示滚动条离顶部的距离 |
ScrollWidth ScrollLeft | 滚动条宽 | width有值,left才能填值 | 只有当ScrollWidth值大于,窗体本身的Width时,滚动条才会显示。这个时候left表示滚动条离左侧的距离 |
四、窗体事件、方法简介
- 常用事件
Initialize
就是在初始化窗口时,要对窗口干的事情,比如给窗口属性赋值,给窗体内包含的控件赋初始值。
Click
点击窗体时,会干的事情,比如隐藏窗体等等
Terminate
关闭窗体是要干的事情,比如保存文件,关闭excel等
- 怎么弄出来事件呢?
先在左边选中窗口(对象),右边基本上都是事件。。。每个对象能响应的事件可能是不一样多的
- 常用方法
move,copy等等呢
- 怎么弄出来方法呢?
跟你写代码一样,写出这个对象在.一下,后面跟的就是方法和属性
一般黑色表示属性,绿色标识方法。
五、Initalize 、click事件示例
下列示例假设程序中已有两个窗体UserForms。在 UserForm1 的Initalize事件中加载 UserForm2 ,并将其显示出来。当用户单击 UserForm2 时,就会将其隐含起来,而 UserForm1 将会出现。而当用户单击 UserForm1 时,UserForm2 便会再次出现。
'这是 UserForm1 的 Initialize 事件过程
Private Sub UserForm_Initialize()
Load UserForm2
UserForm2.Show
End Sub
'这是 UserForm2 的 Click 事件过程
Private Sub UserForm_Click()
UserForm2.Hide
End Sub
' 这是 UserForm1 的 Click 事件
Private Sub UserForm_Click()
UserForm2.Show
End Sub