1 userform的事件
- userform的事件类型不多
- 作为 userform 这一类窗体的最上层,父容器
- 常见的事件 intialize() terminate() active() 等等
1.1 没有 load() 和 unload() 事件,只有对应方法,但是有 intialize() 和 terminate() 事件,应该差不多
对象.对象的方法()----主动调用
通用方法 参数 ---- 执行语句,主动调用
- 而方法只是对象的简便写法的函数调用
- 需要主动调用,顺序执行时才生效,有点像WOW里的游戏主线任务,先接了才能做。
- 加载和卸载
- load userform1
- unload userform1
- 显示和隐藏
- userform1.show()
- userform1.hide()
事件(函数)------触发型
- 事件是作为一个完整的函数/过程 形式出现的
- 是触发型的,有点像WOW里成就,写了就一直再检查,符合条件就触发
- UserForm_Initialize()
- UserForm_Terminate()
'事件是作为一个完整的函数/过程 形式出现的,而方法只是对象的简便写法的函数调用
Private Sub UserForm_Initialize()
End Sub
Private Sub UserForm_Terminate()
End Sub
2 userform的方法 和属性
- 输入 userform1. 后面VBE就会自动提示 userform1 这个对象object 可以调用的 方法和属性
- 其中 绿色的是方法
- 其中 灰色的是属性
2.1 属性和方法的区别
- 方法是要执行的,执行后会有结果,甚至可以带参数/得出不同的结果
- 比如一个加法方法,给不同参数,1+2,3+5 会返回不同的 加法结果
- 属性只是返回对象object 的 确定属性
2.2 name 属性不能修改, caption属性只是显示名
- userform.name 永远不能修改,和模块的名字一样
- userform.caption 只是显示标题,用来看的
- userform.name 作为对象名,在被调用的时候,需要一直用这个名字!
2.3 在不同地方引用userform 这个object时,需要用不同的名字!!!
2.3.1 如果在form本身的 触发事件里,事件名上!
- 触发事件名里,无论是在哪个userform2 / userform3 下,都是自动生成的 userform 这个通用名称。可能原因是因为,这些 事件都是归属在当前这个 userform之下的
- 注意,一是事件名,手动选择后,自动生成
- 第2就是,事件名的里 userform对象,永远都是用的 userform
- Private Sub UserForm_Initialize()
- Private Sub UserForm_Terminate()
2.3.2 如果在本 userform本身的 触发事件里,事件代码内部
- 在 本 userform 的事件代码内部
- 凡是指 本 userform 对象(无论是在 userform2/userform3内。。。)都是用 me
- 比如 me.caption
- 据说也可以用 通用的userform 也可以
2.3.3 如果在其他uesrform的事件代码//模块/其他工作表代码内部
- 在其他userform 的事件代码内部 /模块/其他工作表代码内部
- 需要使用其真实的 userform名字, userform1. userform2等等
- 比如 userform2.unload
- 甚至引用其下面的对象 userform2.label1.caption
3 userform1 的打开,互相调用的一些测试结论
3.1 userform1.show vbmodeless
- userform1.show 缺省 = userform1.show vbmodal
- 模式的窗体,必须等窗体关闭后才能进行其他操作
- 模式窗体:窗体显示后将停显示之后的代码直到退出或隐藏此窗体,并且必须退出或隐藏此窗体后,才可以操作非此窗体的其他界面元素。
- 也就是说,当你使用模式窗体显示某窗体的时候,当程序执行完“显示窗体”这条命令后,将暂停执行程序里剩余的语句,真正这个窗体被隐藏或退出。关且当窗体显示出来以后,你不能激活该窗体以外的任何区域。
- userform1.show vbmodeless
- 无模式窗体
- 窗体在0模式下可以多个窗体同时显示,同时操作,而且可以同时操作EXCEL
- 0模式就是将窗体挂起。可以做其它操作
- 无模式窗体:窗体显示后会继续执行程序里余下的语句,而其他的窗体或界面也可以进行操作
3.2 一个窗体 userform 在打开显示时可以用不同的参数语句打开,使用不同的模式
- 同一个userform 语句,用show方法得一个参数而已,带不同的参数就是不同打开模式
- 也就是userform 都是同一个,可以用不同的方式打开
- UserForm2.Show
- UserForm2.Show vbmodeless
3.3 有多个userform都在show显示状态时,同时显示的userform必须都是一种调用方式
- 窗体之间互相调用
- 如果想让有些userform 是 modeless ,那么同时如果有其他userform也处于 show状态,那必须也是 相同的modeless,否则报错
3.4 窗体之间互相调用,尽量都用 userform.show 0 模式
- 否则会出现 userform互相调用后,第2次调用 userform不初始化的问题