Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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 - Fatal编程技术网

如何从excel中唯一地填充vba组合框?

如何从excel中唯一地填充vba组合框?,excel,vba,combobox,Excel,Vba,Combobox,考虑excel中的以下列表: 如何在我的用户表单组合框中添加此项而不重复每个项目?我制作了一个cmboDepartment.List=Sheets(“DB”).Range(“A3:A995”).Value,但它需要所有列表。首先将下面的子模块放入标准模块。调整工作簿的工作表名称 Public Sub CopyUniqueOnly() Dim i As Long Dim currCell As Range, dict As Object Set dict = CreateObj

考虑excel中的以下列表:


如何在我的用户表单组合框中添加此项而不重复每个项目?我制作了一个
cmboDepartment.List=Sheets(“DB”).Range(“A3:A995”).Value
,但它需要所有列表。

首先将下面的子模块放入标准模块。调整工作簿的工作表名称

Public Sub CopyUniqueOnly()
Dim i As Long

    Dim currCell As Range, dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    With ThisWorkbook.Worksheets("db") 'Change your sheet name.
        For Each currCell In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
            If Not dict.exists(currCell.Value) And Not IsEmpty(currCell) Then
                dict.Add currCell.Value, currCell.Value
            End If
        Next currCell
    End With
    
 Sheets("DB").Range("ZZ1").Resize(dict.Count) = Application.Transpose(dict.keys)
    
End Sub
然后在下面输入代码以形成
初始化
事件

Private Sub UserForm_Initialize()
    Call CopyUniqueOnly
    cmboDepartment.List = Sheets("DB").Range("zz1").CurrentRegion.Value
    Sheets("DB").Range("zz1").CurrentRegion.Clear
End Sub
字典vs数组列表
  • 请注意,
    ArrayList
    需要(即使您安装了较新的)大小超过
    200MB
选项显式
子copyUniqueToCombo()
将ws设置为工作表:设置ws=ThisWorkbook.Worksheets(“DB”)
作为变量的Dim数据
数据=此工作簿。工作表(“DB”)。范围(“A3:A995”)。值
使用CreateObject(“Scripting.Dictionary”)
.CompareMode=vbTextCompare
作为变量的Dim C值
我想我会坚持多久
对于i=1到uBond(数据,1)
C值=数据(i,1)
如果不是IsError(cValue),则
如果Len(cValue)>0,则
.Item(cValue)=空
如果结束
如果结束
接下来我
cmboDepartment.List=.Keys
以
端接头
子副本uniquetocombosorted()
将ws设置为工作表:设置ws=ThisWorkbook.Worksheets(“DB”)
作为变量的Dim数据
数据=此工作簿。工作表(“DB”)。范围(“A3:A995”)。值
使用CreateObject(“System.Collections.ArrayList”)
作为变量的Dim C值
我想我会坚持多久
对于i=1到uBond(数据,1)
C值=数据(i,1)
如果不是IsError(cValue),则
如果Len(cValue)>0,则
'cValue=CStr(cValue)
如果不是。包含(cValue),则
.添加C值
如果结束
如果结束
如果结束
接下来我
.Sort“所有值必须为同一类型,例如字符串
cmboDepartment.List=.ToArray
以
端接头