VBA的userform 相关的基本事件,方法和属性,以及 userform.name 使用规范备忘

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
  1. Private Sub UserForm_Initialize()
  2. 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不初始化的问题

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值