Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 列表框列/字段中组合框列表中的VBA唯一值_Excel_Vba_Combobox_Listbox_Unique - Fatal编程技术网

Excel 列表框列/字段中组合框列表中的VBA唯一值

Excel 列表框列/字段中组合框列表中的VBA唯一值,excel,vba,combobox,listbox,unique,Excel,Vba,Combobox,Listbox,Unique,我希望在列表框的列表每次更改时,只列出列表框字段/列中的唯一值 例如,列表框中的第3列包含苹果、草莓和香蕉的多个实例。我希望组合框只包含苹果、草莓和香蕉各一次 有什么好主意吗?可以使用字典从列表中删除重复项。要使以下代码正常工作,您必须将“Microsoft脚本运行时”添加到您的应用程序中 我还没有机会测试它,让我知道它是否有效。从列表中删除重复项可以使用字典实现。要使以下代码正常工作,您必须将“Microsoft脚本运行时”添加到您的应用程序中 我还没有机会测试它,请告诉我它是否有效。请尝试下

我希望在列表框的列表每次更改时,只列出列表框字段/列中的唯一值

例如,列表框中的第3列包含苹果、草莓和香蕉的多个实例。我希望组合框只包含苹果、草莓和香蕉各一次


有什么好主意吗?

可以使用字典从列表中删除重复项。要使以下代码正常工作,您必须将“Microsoft脚本运行时”添加到您的应用程序中


我还没有机会测试它,让我知道它是否有效。

从列表中删除重复项可以使用字典实现。要使以下代码正常工作,您必须将“Microsoft脚本运行时”添加到您的应用程序中


我还没有机会测试它,请告诉我它是否有效。

请尝试下面的代码,并告诉我们您的反馈

Private Sub ListBox1_Change()
    Dim dict As Object
    Dim i As Long

    Set dict = CreateObject("Scripting.Dictionary")
        For i = 0 To ListBox1.ListCount - 1
            dict.Item(ListBox1.List(i)) = vbNullString
        Next i
    ComboBox1.List = dict.keys
    Set dict = Nothing
End Sub

尝试以下代码,并让我们知道您的反馈

Private Sub ListBox1_Change()
    Dim dict As Object
    Dim i As Long

    Set dict = CreateObject("Scripting.Dictionary")
        For i = 0 To ListBox1.ListCount - 1
            dict.Item(ListBox1.List(i)) = vbNullString
        Next i
    ComboBox1.List = dict.keys
    Set dict = Nothing
End Sub

为组合框指定唯一的第三列项目

  • [1]
    有几种方法可以接收Unique(字典、arraylist);我演示了一种使用
    FilterXML()
    函数(从2013年版开始提供)的方法,以及一种通过
    arr=Application.Index(Me.ListBox1.column,3,0)
    通过listbox的
    .column
    属性隔离第三列的巧妙方法,从而接收到一个没有循环的“平面”数组
  • [2]
    基于数组数据创建一个简单的格式良好的xml结构,并提供一个XPath搜索字符串来获取unique和
  • [3]
    将通过
    FilterXML()
    接收到的“垂直”二维Unique分配给组合框的
    。List
    属性。此外,我还添加了一个针对单个项目的小错误处理程序
Private子列表框1_Change()
如果Me.ListBox1.ListCount=0,则如果没有可用的列表项,则退出子“Escape”
应用
“[1]获取listbox的第三列项目
Dim arr:arr=.Index(Me.ListBox1.Column,3,0)索引使用基于1的索引
“[2]创建FilterXML参数以获取唯一性
Dim XContent作为字符串:XContent=“&Join(arr)”&“
Dim XP As String:XP=“//s[not(前面的::*=)]”XPath表达式搜索唯一性
“[3]为组合框指定“垂直”二维唯一性
Dim uniques:uniques=.FilterXML(XContent,XP)'get uniques to combobox
错误时继续下一步:Me.ComboBox1.List=uniques'将uniques分配给combobox
如果错误号为0,则Me.ComboBox1.AddItem uniques
以
端接头

为组合框指定唯一的第三列项目

  • [1]
    有几种方法可以接收Unique(字典、arraylist);我演示了一种使用
    FilterXML()
    函数(从2013年版开始提供)的方法,以及一种通过
    arr=Application.Index(Me.ListBox1.column,3,0)
    通过listbox的
    .column
    属性隔离第三列的巧妙方法,从而接收到一个没有循环的“平面”数组
  • [2]
    基于数组数据创建一个简单的格式良好的xml结构,并提供一个XPath搜索字符串来获取unique和
  • [3]
    将通过
    FilterXML()
    接收到的“垂直”二维Unique分配给组合框的
    。List
    属性。此外,我还添加了一个针对单个项目的小错误处理程序
Private子列表框1_Change()
如果Me.ListBox1.ListCount=0,则如果没有可用的列表项,则退出子“Escape”
应用
“[1]获取listbox的第三列项目
Dim arr:arr=.Index(Me.ListBox1.Column,3,0)索引使用基于1的索引
“[2]创建FilterXML参数以获取唯一性
Dim XContent作为字符串:XContent=“&Join(arr)”&“
Dim XP As String:XP=“//s[not(前面的::*=)]”XPath表达式搜索唯一性
“[3]为组合框指定“垂直”二维唯一性
Dim uniques:uniques=.FilterXML(XContent,XP)'get uniques to combobox
错误时继续下一步:Me.ComboBox1.List=uniques'将uniques分配给combobox
如果错误号为0,则Me.ComboBox1.AddItem uniques
以
端接头

这非常有效,谢谢。我刚刚将ListBox1.List(I)更改为ListBox1.List(I,3),以便只选择一列进行添加。这非常有效,谢谢。我刚刚将ListBox1.List(I)更改为ListBox1.List(I,3),以便只选择一列进行添加。谢谢。我同意第一个答案。这个非常相似。我感谢你的贡献,没问题。是的,几乎相似,但伟大的事情是不需要添加任何参考。谢谢。我同意第一个答案。这个非常相似。我感谢你的贡献,没问题。是的,几乎相似,但伟大的事情是不需要添加任何参考。感谢您的贡献。这是一个经过深思熟虑的解决方案。感谢您的贡献。这是一个经过深思熟虑的解决方案。
Private Sub ListBox1_Change()
    If Me.ListBox1.ListCount = 0 Then Exit Sub              ' Escape if no list items available
    With Application
        '[1] get 3rd column items of listbox
        Dim arr: arr = .Index(Me.ListBox1.Column, 3, 0)     ' Index uses 1-based indices

        '[2] create FilterXML arguments to get uniques
        Dim XContent As String: XContent = "<t><s>" & Join(arr, "</s><s>") & "</s></t>"
        Dim XP As String: XP = "//s[not(preceding::*=.)]"   ' XPath expression searching uniques
        '[3] assign "vertical" 2-dim uniques to combobox
        Dim uniques: uniques = .FilterXML(XContent, XP)     ' get uniques to combobox
        On Error Resume Next:  Me.ComboBox1.List = uniques  ' assign uniques to combobox
        If Err.Number <> 0 Then Me.ComboBox1.AddItem uniques
    End With
End Sub