VBA用户窗体ListBox与ComboBox初始化后始终为空问题咨询
问题原因
- VBA用户窗体的初始化触发事件有固定命名规则,必须为
UserForm_Initialize才会在窗体调用Show方法时自动执行,你自定义的DinnerPlanner_Initialize属于普通私有过程,没有绑定窗体初始化事件,所以添加选项的代码从未自动运行。 - 额外的隐性问题:你在初始化过程中调整窗体大小时引用了窗体名
DinnerPlanner而非Me,如果触发了窗体默认实例的隐式创建,也可能导致控件修改不生效。 - 你尝试的
Items.Add是.NET平台下控件的写法,VBA原生用户窗体的列表框、组合框没有该属性,该方法无效。
解决方法
- 直接修改初始化过程的名称,将
Private Sub DinnerPlanner_Initialize()改为Private Sub UserForm_Initialize(),保留原有内部代码不变,窗体加载时会自动触发该过程完成选项填充。 - 将调整窗体大小的代码块修改为:
With Me .Width = 369.75 .Height = 538.5 End With
- 同步修改ClearButton的点击事件代码,调用修改后的初始化过程:
Private Sub ClearButton_Click() Call UserForm_Initialize End Sub
- 可选优化:修正代码里的两处逻辑错误避免后续运行异常:
- OkButton点击事件里的日期赋值逻辑,第三行判断条件写错为
DateCheckBox1.Value = True,应改为DateCheckBox3.Value = True,否则选第三个日期会无法正确赋值 - 初始化过程最后一行
NameTextBox拼写错误为NmaeTextBox,修正后可避免设置焦点时报错
- OkButton点击事件里的日期赋值逻辑,第三行判断条件写错为
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

