更新列表框时遇到问题

时间:2014-04-24 03:39:18

标签: excel vba

我创建了一个excel用户表单,其中包含三个组合框和包含3列的列表框。

当用户从下拉列表中选择一个值并单击“添加”按钮时,它将显示在列表框中 - 完成

当用户选择列表框中的项目时,它将再次显示在下拉列表中 - 已完成

但是当用户选择列表框中的项目并单击更新按钮时,它会调用ListBox _click()函数,我不希望它调用listbox_click函数

提供帮助。更新代码

将值从下拉列表添加到列表框的代码

Private Sub cmdAdd_Click()
Call lstValues.AddItem(AddPpayTierOption(cboPpayTier.Value))
lstValues.List(UBound(lstValues.List), COL_BRAND) = cboBrandTier.Value
lstValues.List(UBound(lstValues.List), COL_GEN) = cboGenTier.Value
End Sub

单击列表框中的项目时,它将在下拉列表中显示值

Private Sub lstValues_Click()
Dim I As Long
cmdEdit.Enabled = True
cmdRemove.Enabled = True  
If lstValues.ListIndex <> -1 Then
    For I = 0 To lstValues.ColumnCount - 1
        If I = 0 Then
        cboPpayTier.Value = lstValues.Column(I)
        Else
        If I = 1 Then
        cboBrandTier.Value = lstValues.Column(I)
        Else
        If I = 2 Then
        cboGenTier.Value = lstValues.Column(I)
        End If
        End If
        End If
    Next I
End If

End Sub

当用户点击更新按钮代码时。

当它进入 lstValues.Column(j)= cboPpayTier.Value 行时,它调用lstValues_Click()函数我不希望代码调用该函数。请帮忙

Private Sub cmdEdit_Click()
Dim j As Long
Dim var As Variant
 If lstValues.ListIndex <> -1 Then
        For j = 0 To lstValues.ColumnCount - 1
            If j = 0 Then
            lstValues.Column(j) = cboPpayTier.Value   
            Else
            If j = 1 Then
            lstValues.Column(j) = cboBrandTier.Value
            Else
            If j = 2 Then
            lstValues.Column(j) = cboGenTier.Value
            End If
            End If
            End If
        Next j
    End If
End Sub

请让我进一步澄清。

2 个答案:

答案 0 :(得分:0)

尝试使用List作为列表框的数据源。更新时,首先将listbox的数据源设为null,然后等于List

答案 1 :(得分:0)

两个选项:

  1. 使用Application.EnableEvents = False禁用事件处理。并Application.EnableEvents = True重新启用。请注意,这会禁用所有事件处理,因此请将其放在代码的任何一侧,否则会触发您不想要的事件。
  2. 声明一个全局标志。在代码之前设置它将触发您不想要的事件。在事件Sub本身中,检查标志,如果已设置则退出。在事件触发代码的另一侧或事件Sub本身重置标志。不会停止事件,但会停止执行您不想要的代码。
  3. 根据要求,选项2的例子

    在标准模块中,位于顶部(Option Explicit之后),添加此代码

    Global InhibitEvent As Boolean
    

    在您的代码中

    ' Somewhere in your code,
    ' when you are about to execute some logic that will trigger an event
    InhibitEvent = True
    
    '... event triggering logic here
    
    InhibitEvent = False
    

    在您不想执行的事件Sub中(例如,listBox Change事件)

    Private Sub ListBox1_Change()
        ' Look for Event Inhibit
        If InhibitEvent Then Exit Sub
    
        ' rest of event code here
    
    End Sub