如何在VBA中对combo Box(组合框)数据进行去重筛选
解决方案
可以通过VBA的字典对象实现组合框数据自动去重,利用字典Key不可重复的特性,无需额外写重复判断逻辑,执行效率也远高于手动遍历去重,以下是修改后的完整代码:
Private Sub UserForm_Activate() Dim myrng As Range Dim cl As Range Dim sh As Worksheet Dim objDict As Object ' 创建字典对象,后期绑定无需手动引用库 Set objDict = CreateObject("Scripting.Dictionary") Set sh = Worksheets("Product_Master") Set myrng = sh.Range("C2:C100000") With Me.comBox_Purchase_Product .Clear For Each cl In myrng.Cells ' 跳过空值,且仅当值不存在于字典中时添加 If cl.Value <> "" And Not objDict.exists(cl.Value) Then objDict.Add cl.Value, "" End If Next cl ' 直接将字典的所有Key批量赋值给组合框 .List = objDict.keys End With ' 释放对象 Set objDict = Nothing Set sh = Nothing Set myrng = Nothing End Sub
代码优化说明
- 采用后期绑定创建字典对象,不需要手动在VBA编辑器中添加「Microsoft Scripting Runtime」引用,可直接运行
- 遍历单元格时仅添加未出现过的非空值,自动过滤重复项
- 最终通过
List属性批量赋值,比循环AddItem执行速度更快,适配最大10万行的数据源场景

内容的提问来源于stack exchange,提问作者NAITIK JAIN
相关产品推荐
相关产品推荐

