Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3686|回复: 4

[待分类] 打造具有唯一值的下拉列表

[复制链接]
发表于 2012-5-1 13:50 | 显示全部楼层 |阅读模式

Rem VBA知识点:ComboBox
Dim arr()    '声明公共变量,过程结果时可保留其值
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then   '选择第一列时出现复合框
        On Error Resume Next
        Debug.Print UBound(arr)  '该句的作用是测试数组arr是否有值,如果数组为空产生错误
        If Err <> 0 Then  '如果有错误(表示空数为空),那么对数据源过滤重复值,并添加到数组
            Dim cell As Range, onlys As New Collection, Item As Long
            On Error Resume Next
            With Sheets("Data")
                For Each cell In .Range(.[a1], .Cells(Rows.Count, 1).End(xlUp))
                    onlys.Add cell.Value, CStr(cell.Text)  '过滤重复值
                Next
                On Error GoTo 0
                '重置数组大小,其上界等于不重复数的个数
                ReDim arr(1 To onlys.Count, 1 To 2)
                For Item = 1 To onlys.Count
                    '将不重复值逐个加入数组arr,其第一列来自onlys对象,第二列利用Vlookup从Data工作表中引用
                    arr(Item, 1) = onlys(Item)
                    arr(Item, 2) = WorksheetFunction.VLookup(onlys(Item), .Range(.[a1], .Cells(Rows.Count, 2).End(xlUp)), 2, 0)
                Next
            End With
            With Me.ComboBox1
                .List = arr    '将数组赋与列表框
                .ColumnCount = 2  '默认显示二列
                .BoundColumn = 1    '将第一列导入单元格,也可以修改为第二列
                .ColumnWidths = "30,30"  '每列宽度
                .Width = 80  '整体宽度
                .BackColor = &H80000003  '背景色
                .ListStyle = fmListStyleOption    '设置样式
            End With
        End If
        With Me.ComboBox1    '如果无错误(表示数据存在),那么直接改复合框的链接地址与位置即可,不需要再计算过滤重复值,产生数组
            .LinkedCell = Target(1).Address
            .Top = Target.Top            '高度与活动单元格一致
            .Left = Target.Offset(0, 1).Left  '显示在活动单元格右方
            .Visible = True                '保持可见
        End With
    Else
        Me.ComboBox1.Visible = False  '在其它列单击时隐藏复合框
    End If
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-5-1 14:29 | 显示全部楼层
回复

使用道具 举报

发表于 2012-5-1 21:05 | 显示全部楼层
顶                                             
回复

使用道具 举报

发表于 2013-6-3 22:30 | 显示全部楼层
顶,很好!,练习!练习
回复

使用道具 举报

发表于 2013-7-17 11:46 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-31 17:02 , Processed in 0.118513 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表