Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用更新列表框进行Troble_Excel_Vba - Fatal编程技术网

Excel 使用更新列表框进行Troble

Excel 使用更新列表框进行Troble,excel,vba,Excel,Vba,我创建了一个包含三个组合框和三列列表框的excel用户表单 当用户从下拉列表中选择一个值并单击“添加”按钮时,它将显示在列表框中-完成 当用户在列表框中选择一项时,它将再次显示在下拉列表-完成中 但当用户选择列表框中的项目并单击更新按钮时,它将调用列表框 _click()函数,我不希望它调用listbox\u click函数 请帮忙。更新代码 用于将值从下拉列表添加到列表框的代码 Private Sub cmdAdd_Click() Call lstValues.AddItem(AddPpayT

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

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

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

但当用户选择列表框中的项目并单击更新按钮时,它将调用列表框 _click()函数,我不希望它调用listbox\u 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
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