Excel 使用更新列表框进行Troble
我创建了一个包含三个组合框和三列列表框的excel用户表单 当用户从下拉列表中选择一个值并单击“添加”按钮时,它将显示在列表框中-完成 当用户在列表框中选择一项时,它将再次显示在下拉列表-完成中 但当用户选择列表框中的项目并单击更新按钮时,它将调用列表框 _click()函数,我不希望它调用listbox\u click函数 请帮忙。更新代码 用于将值从下拉列表添加到列表框的代码Excel 使用更新列表框进行Troble,excel,vba,Excel,Vba,我创建了一个包含三个组合框和三列列表框的excel用户表单 当用户从下拉列表中选择一个值并单击“添加”按钮时,它将显示在列表框中-完成 当用户在列表框中选择一项时,它将再次显示在下拉列表-完成中 但当用户选择列表框中的项目并单击更新按钮时,它将调用列表框 _click()函数,我不希望它调用listbox\u click函数 请帮忙。更新代码 用于将值从下拉列表添加到列表框的代码 Private Sub cmdAdd_Click() Call lstValues.AddItem(AddPpayT
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
Private Sub-lstValues\u Click()
我想我会坚持多久
cmdEdit.Enabled=True
cmdRemove.Enabled=True
如果lstValues.ListIndex为-1,则
对于I=0到lstValues.ColumnCount-1
如果I=0,那么
cboPpayTier.Value=lstValues.Column(I)
其他的
如果I=1,那么
cboBrandTier.Value=lstValues.Column(I)
其他的
如果I=2,那么
CbGenetier.Value=lstValues.Column(I)
如果结束
如果结束
如果结束
接下来我
如果结束
端接头
当用户单击“更新”按钮代码时
当它转到lstValues.Column(j)=cboPpayTier.Value行时,它调用lstValues\u 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
Private Sub cmdEdit\u Click()
Dim j尽可能长
作为变量的Dim-var
如果lstValues.ListIndex为-1,则
对于j=0到lstValues.ColumnCount-1
如果j=0,则
lstValues.Column(j)=cboPpayTier.Value
其他的
如果j=1,则
lstValues.Column(j)=cboBrandTier.Value
其他的
如果j=2,则
lstValues.Column(j)=CbGenetier.Value
如果结束
如果结束
如果结束
下一个j
如果结束
端接头
请允许我进一步澄清。尝试使用列表作为列表框的数据源。更新时,首先将listbox的数据源设置为null,然后将其设置为等于List两个选项:
Application.EnableEvents=False
禁用事件处理。和Application.EnableEvents=True
重新启用。注意,这将禁用所有事件处理,因此将其放在代码的任一侧,否则会触发您不想要的事件Sub
本身中,检查标志,如果已设置,则退出。重置事件触发代码另一侧或事件Sub
本身的标志。不会停止事件firng,但会停止它执行您不想要的代码李>
根据要求,选项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
中(例如列表框更改事件)
谢谢你能解释一下选项2怎么做吗。。。。如果你给出的代码真的很有用@chris Thanke a lot效果很好…我还有一个问题…当我在下拉列表中选择该值时,我想检查第I个列表框中的taht值是否已经可用,如果是,那么我不应该更新这些值。。。基本上,我只想在列表框中更新唯一的值,很高兴能提供帮助。顺便说一句,这里的礼仪是,如果你觉得这个或任何答案有帮助,你应该接受它。(单击勾号)完成。道歉新手在如此。。。如果您有时间,请让我在列表框中查找唯一值。。。这段代码应该在私有子cmdAdd_Click()模块中,在该模块中,我们将值从下拉列表添加到列表框。再次感谢
Private Sub ListBox1_Change()
' Look for Event Inhibit
If InhibitEvent Then Exit Sub
' rest of event code here
End Sub