如何从excel中唯一地填充vba组合框?
考虑excel中的以下列表:如何从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
如何在我的用户表单组合框中添加此项而不重复每个项目?我制作了一个
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
以
端接头