MS Forms ComboBox在运行时不在VBA中更新

时间:2013-06-12 17:37:00

标签: vba powerpoint-vba

我在没有更新的用户表单上有一个组合框,除非我放了一个断点并单步执行代码,或弹出MsgBox等等。

'MsgBox "", vbInformation
Group_Form.CrossVariable_Cbox = groupVar
Debug.Print "After updating Group_Form.CrossVariable_Cbox = " & _
            groupVar & ":  " & (Group_Form.CrossVariable_Cbox = groupVar)

我确认此后没有事件发生。表单显示为vbModeless,当我显示msgbox时,或者当我使用F8调试程序单步执行代码时,CrossVariable_Cbox.Value会正确更新。

我的Debug.Print语句确认值匹配,但是,如果我允许它不间断运行(没有msgbox,没有调试模式),表单显示没有值,即使Print告诉我已正确更新。

这当然会导致MS Forms的“无效的属性值”通知。

有什么建议吗?

在下面的镜头中,值应该是“保险公司”和列表指数372或类似的东西。两者都确认我是否调试它,但是当我允许它不间断地运行时,该框显示空/ listindex = -1,并导致错误......

enter image description here

1 个答案:

答案 0 :(得分:1)

感谢Santosh的建议,我能解决这个问题。

Santosh建议:

Group_Form.CrossVariable_Cbox = groupVar
DoEvents

这是部分成功。我的Debug语句现在告诉我False,ComboBox仍然显示一个空值。这在某种程度上避免了最初的MS Forms警告,但除非我在组合框中进行选择,否则下一个动作/事件会引发警告。

我玩了一下,并将DoEvents放在ComboBox分配之前:

DoEvents
Group_Form.CrossVariable_Cbox = groupVar

Debug.Print "After updating Group_Form.CrossVariable_Cbox = " & _
            groupVar & ":  " & (Group_Form.CrossVariable_Cbox = groupVar)

现在,我的调试语句告诉我True最重要的是,表单在ComboBox中显示正确的值。