用户表单列表框点击代码不会触发

时间:2018-11-17 16:04:09

标签: excel vba

我在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子级不会触发。

2 个答案:

答案 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

如果它在用户窗体代码中,则此方法无效。