Excel Userform listbox单击代码不会触发

Excel Userform listbox单击代码不会触发,excel,vba,Excel,Vba,我使用工具菜单在Excel 2016中创建了一个用户表单,其中包含两个列表框。我双击它们来创建sub,并插入代码,以便在选择sub时进行检查 代码如下: Private sub SaleType_Click () If SaleType.Value ="Core" then 'make sale label visible QTDV.visible =true ' show core option btn Core.Vis

我使用工具菜单在Excel 2016中创建了一个用户表单,其中包含两个列表框。我双击它们来创建sub,并插入代码,以便在选择sub时进行检查

代码如下:

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
当我有一个从工具箱创建的列表框时,这是可行的,但每隔一次运行表单时,saletype列表框的值将为null,这是一个问题,因为我要检查列表框是否为空。代码如下:

If saletype = "" then  
    Dim msg as string Msg = " please select sale type"  
    Msgbox msg, and vbcritical
End if
如果列表框显示值
null
它将不会将其视为空,如果我尝试
saletype=null
它仍将跳过检查

我搜索了一下,似乎在工具箱上创建列表框很奇怪,因为Excel不知道它是什么类型的控件。我选择在VBA中创建列表框

Private sub userform_initialize()
    Dim saletype as msforms.Listbox
    Set saletype = me.Controls.Add("Forms.ListBox.1", "SaleType") 

但是,当运行表单并在列表框上选择任何选项时,
SaleType\u Click
子项不会触发。

如果要实现事件处理(如SaleType\u Click),则需要使用WithEvents关键字声明对象:

如果未设置变量/属性,则其值不存在,因此您需要验证空字符串(“”),而不是空字符串(“”),IsNull函数可以这样做(=NULL不工作,因为=仅与值一起工作):


我只是有一个问题,我的列表框点击没有被解雇“每隔一次”。也许是在同一个选项连续两次被选中的时候。无论如何,请将其放入正在“显示”用户表单的工作表的工作表代码中:

  userformXXX.listboxYYY.ListIndex = -1
  userformXXX.Show

如果在用户表单代码中,则不起作用。

如果在vba中创建列表框,请尝试将其声明为Dim WithEvents saletype为msforms.listbox,然后查看其是否起作用。您好,感谢您的回复,将WithEvents添加到Dim会返回一个错误sub或Form中的无效属性OK将sub中的变量fr移到了外部,并解决了8t现在触发事件,但现在是if saletype。Value=”“始终显示为null。使用IsNull函数检查null。若要澄清我是否从列表框中选择了任何值,它将在saletype中显示。Value但如果我未选择任何值,它将显示null
If IsNull (saletype.Value) then
  userformXXX.listboxYYY.ListIndex = -1
  userformXXX.Show