VBA, 窗体userform 互相调用问题: 第2次调用1个userform会导致其无法初始化的问题 和解决办法

总结

  • 问题:第2次调用1个userform会导致其无法初始化的问题 和解决办法
  • 原因:可能的原因,是其实 每个userform 在 vbmodal默认打开模式下,只会intialize()执行1次,而重复load 这个 userform 其实都不会再触发了
  • 解决办法
  • 方法1:主界面不关闭,其他界面叠加在其之上显示,每次关闭都回到主界面。
  • 方法2: userform1.show  vbmodeless 即可
  • 方法3: 把一些  userform_initial()里的 代码写到 专门的函数里 去,比如每次active都调用?或者其他应该触发的时机调用?

1 重复load userform ,第2次调用1个userform会导致其无法初始化的问题 

1.1 有问题的情况

  • 用userform1 打开 userform2 或 userform3, 同时关闭userform1
  • 然后关闭userform2 或 userform3,  后回到userform1
  • 第2次打开userform2 /3 就BUG

'---以下都是----userform1-----的内容---------------

Private Sub CommandButton1_Click()
    Unload UserForm1
    Load UserForm2
    UserForm2.Show     'vbmodeless 打开是选择得一个,show方法得一个参数而已

End Sub

Private Sub CommandButton2_Click()
    Unload UserForm1
    Load UserForm3
    UserForm3.Show
End Sub

'---以下都是----userform2-----的内容---------------

Private Sub UserForm_Initialize()
     Label1.Caption = "我是userform2"
End Sub

Private Sub UserForm_Terminate()

     Unload UserForm2
'     Close UserForm2
     Load UserForm1
     UserForm1.Show
    
End Sub


'---以下都是----userform3-----的内容---------------

Private Sub UserForm_Initialize()
     Label1.Caption = "我是userform2"
End Sub

Private Sub UserForm_Terminate()
     Unload UserForm3
'     Close UserForm3
     Load UserForm1
     UserForm1.Show
End Sub

1.2 解决方案1

  • 用userform1 打开 userform2 和 userform3,然后userform1 自身不关闭
  • 然后关闭userform2/3 时,不重新load 和show user form1
  • 这样就没问题

'---以下都是----userform1-----的内容---------------

Private Sub CommandButton1_Click()

'    Unload UserForm1
    Load UserForm2
    UserForm2.Show

End Sub

Private Sub CommandButton2_Click()

'    Unload UserForm1
    Load UserForm3
    UserForm3.Show

End Sub

'---以下都是----userform2-----的内容---------------

Private Sub UserForm_Initialize()

     Label1.Caption = "我是userform2"
End Sub

Private Sub UserForm_Terminate()

     Unload UserForm2
'     Close UserForm2

'     Load UserForm1
'     UserForm1.Show
    
    
End Sub

'---以下都是----userform3-----的内容---------------


Private Sub UserForm_Initialize()

     Label1.Caption = "我是userform2"
End Sub

Private Sub UserForm_Terminate()

     Unload UserForm3
'     Close UserForm3

'     Load UserForm1
'     UserForm1.Show
    
End Sub

1.3 解决方法2

  •  UserForm1.Show 0    'vbModeless即参数0
  • 用userform1 打开 userform2 或 userform3, 同时关闭userform1(只要  userform2/3.show modeless 就可以)
  • 然后关闭userform2 或 userform3,  后回到userform1 (只要  userform1.show modeless 就可以)

'---以下都是----userform1-----的内容---------------

Private Sub CommandButton1_Click()

    Unload UserForm1
    Load UserForm2
    UserForm2.Show vbModeless

End Sub

Private Sub CommandButton2_Click()

    Unload UserForm1
    Load UserForm3
    UserForm3.Show vbModeless

End Sub

'---以下都是----userform2-----的内容---------------

Private Sub UserForm_Initialize()

     Label1.Caption = "我是userform2"
End Sub

Private Sub UserForm_Terminate()

     Unload UserForm2
'     Close UserForm2

     Load UserForm1
     UserForm1.Show vbModeless
    
    
End Sub


'---以下都是----userform3-----的内容---------------


Private Sub UserForm_Initialize()

     Label1.Caption = "我是userform3"
End Sub

Private Sub UserForm_Terminate()

     Unload UserForm3
'     Close UserForm3

     Load UserForm1
     UserForm1.Show 0    'vbModeless即参数0,默认参数1是 vbmodal
    
End Sub

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值