我在Excel 2016中使用“工具”菜单创建了一个带有两个列表框的用户窗体。我双击它们创建了子程序,并插入了代码以检查是否选择了子程序。
代码如下:
Private sub SaleType_Click ()
If SaleType.Value ="Core" then
'make sale label visible
QTDV.visible =true
' show core option btn
Core.Visible = true
End if
End sub
当我从工具箱创建了一个ListBox时,此方法有效,但是每隔一次运行表单,saletype ListBox的值将为null,这是一个问题,因为我要进行检查以确保ListBox不为空。代码如下:
If saletype = "" then
Dim msg as string Msg = " please select sale type"
Msgbox msg, and vbcritical
End if
如果ListBox的值是null
,它将不会看到它为空,并且如果我尝试使用saletype = null
,则会跳过检查,它仍然会跳过它。
我搜索了一下,似乎在工具箱上创建ListBoxes很奇怪,因为Excel不知道它是哪种控件。我选择在VBA中创建ListBoxes。
Private sub userform_initialize()
Dim saletype as msforms.Listbox
Set saletype = me.Controls.Add("Forms.ListBox.1", "SaleType")
但是运行表单并在ListBox上选择任何选项时,SaleType_Click
子级不会触发。
答案 0 :(得分:0)
如果要实现事件处理(如SaleType_Click),则需要使用WithEvents关键字声明对象:
Dim WithEvents saletype as msforms.Listbox
如果未设置变量/属性,则其值不存在,因此您需要验证NULL而不是空字符串(“”)-IsNull函数可以做到这一点(= NULL不能像=仅适用于值):
If IsNull (saletype.Value) then
答案 1 :(得分:0)
我只是有一个问题,我的listbox_Click没有被“每隔一次”解雇。也许是连续两次需要相同的选择时。无论如何,将其放在“显示”用户表单的工作表的工作表代码中:
userformXXX.listboxYYY.ListIndex = -1
userformXXX.Show
如果它在用户窗体代码中,则此方法无效。