我创建了一个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
请让我进一步澄清。
答案 0 :(得分:0)
尝试使用List作为列表框的数据源。更新时,首先将listbox的数据源设为null,然后等于List
答案 1 :(得分:0)
两个选项:
Application.EnableEvents = False
禁用事件处理。并Application.EnableEvents = True
重新启用。请注意,这会禁用所有事件处理,因此请将其放在代码的任何一侧,否则会触发您不想要的事件。Sub
本身中,检查标志,如果已设置则退出。在事件触发代码的另一侧或事件Sub
本身重置标志。不会停止事件,但会停止执行您不想要的代码。 根据要求,选项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