【问题标题】:Excel '13 VBA Cascading ComboBox - Trouble getting unique values in Combobox2Excel '13 VBA Cascading ComboBox - 在 Combobox2 中获取唯一值时遇到问题
【发布时间】:2015-10-29 19:42:15
【问题描述】:

我终于能够让 combobox2 加载与在 combobox1 中所做的选择相对应的值。问题是我不能只获得唯一值来填充组合框2。它根据组合框1 的选择返回所有值,包括重复项。我已将 .clear 移动到代码中的各个位置,但这只会将其从加载多个重复值更改为显示 1 个总值或空白。

这是我改编代码的来源 https://www.youtube.com/watch?v=yMO_wCZgQbc

("DATA") 是我的数据所在的工作表 ("CHART") 是我的组合框所在的工作表 cmbRent = 组合框1 cmbSub = ComboBox2

    Private Sub cmbRent_Change()

MyVal = Me.cmbRent.Value

'loop thru col B
lr = ThisWorkbook.Sheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row

  'clear cmbSub
    ThisWorkbook.Sheets("CHART").cmbSub.Clear


'loop thru
For x = 2 To lr
    If MyVal = ThisWorkbook.Sheets("DATA").Cells(x, 1) Then
        'add to combobox
   ThisWorkbook.Sheets("CHART").cmbSub.AddItem ThisWorkbook.Sheets("DATA").Cells(x, 2)
  End If

Next x


      ThisWorkbook.Sheets("CHART").cmbSub.ListIndex = -1
End Sub

【问题讨论】:

    标签: vba excel combobox activex cascadingdropdown


    【解决方案1】:

    您需要添加检查以查看这些是否已添加到组合框中。 我还在工作表中使用了变量,以简化代码的可读性并加快输入速度。

    Dim wsChart As Worksheet
    Dim wsData As Worksheet
    Dim listOfValues As String 'To store list of values already added
    Dim ValueToAdd As String 'To store new value to add
    listOfValues = ""
    Set wsChart = ThisWorkbook.Sheets("CHART") 
    Set wsData = ThisWOrkbook.Sheets("DATA")
    
    .....(insert rest of code here)
    
    For x = 2 To lr
        If MyVal = wsData.Cells(x, 1) Then
           'add to combobox
            ValueToAdd = wsData.Cells(x,2) 'Get value from worksheet
            If InStr(listOfValues, valueToAdd) = 0 Then
            'Check to see if the value has already been added
            'If not, add to values added and add the item to the combobox.
                  listOfValues = listOfValues & ValueToAdd
                  wsChart.cmbSub.AddItem valueToAdd
            End If
        End If
    Next x
    

    【讨论】:

    • 工作得很好!我不得不将 wsChart.cmbSub.AddItem 更改为 Me.cmbSub.AddItem 因为它引发了错误,但这是唯一的问题!我可以通过替换将它应用于 cmb3 和 cmb4 吗?假设对于 combobox3,我会将 cmb2 移动到 cmb1 所在的位置并更新列以反映新值所基于的数据?
    • 是的。只需更改您从中获取信息的列,然后更改组合框的名称。
    • 非常感谢!所有连击都已填满,我现在有一个关于 cmb4 的新问题。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多