Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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';13 VBA级联组合框-在组合框2中获取唯一值时遇到问题2_Vba_Excel_Combobox_Activex_Cascadingdropdown - Fatal编程技术网

Excel';13 VBA级联组合框-在组合框2中获取唯一值时遇到问题2

Excel';13 VBA级联组合框-在组合框2中获取唯一值时遇到问题2,vba,excel,combobox,activex,cascadingdropdown,Vba,Excel,Combobox,Activex,Cascadingdropdown,我终于能够让combobox2加载与combobox1中所做选择相对应的值。问题是,我不能在combobox2中只获得唯一的值来填充。它根据combobox1的选择返回所有值,包括重复项。我已将.clear移到代码中的各个点,但这只会将其从加载多个重复值更改为显示1个总值或空白 下面是我修改代码的源代码 (“数据”)是存放我的数据的工作表 (“图表”)是我的组合框所在的工作表 cmbRent=ComboBox1 cmbSub=ComboBox2 Private Sub cmbRent_

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

下面是我修改代码的源代码

(“数据”)是存放我的数据的工作表 (“图表”)是我的组合框所在的工作表 cmbRent=ComboBox1 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

您需要添加一个复选框,查看这些是否已经添加到组合框中。 我还在工作表中使用了变量,以便于代码可读性,并加快键入速度

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的新版本。谢谢