EXCEL如何创建下拉列表?

EXCEL如何创建下拉列表?,第1张

菜单:数据-有效性

在d出的对话框中

选择"设置"选项卡

有效性条件的"允许"中

选序列

下面的来源框中,输入要创建的下拉列表内容,注意每条目间用逗号隔开

(下拉列表的来源,还可以选定事先输入好的下拉内容的单元格区域)

1、点击“开始”—“Visual Studio 2015”,启动 Visual Studio 2015。

2、点击新建项目,新建一个Windows应用程序项目。

3、在窗体上添加一个comboBox控件。

4、右键点击窗体空白处,点击“查看代码”,切换到代码编辑页面。

5、在Form_Load事件函数中,编写代码,读取数据库中的数据,以及将读取结果绑定到comboBox控件。

6、将查询结果绑定到comboBox控件,主要用到datasource和displaymember两个属性,displaymember就是要在comboBox下拉列表中进行显示的列名,如DJ_ArchNO

7、设置好之后,点击Visual Studio 2015工具栏的“启动”,看看效果。

8、数据库中的DJ_ArchNO 列就显示在comboBox下拉列表了,完成效果图。

ExcelVBA字典实现窗体二级下拉菜单:

问题提出:

选择确定ComboBox1中的数值后,ComboBox2的下拉列表自动引用ComboBox1中数值对应的列的内容。如何能做到,现在想在加一重判断:就是判断ComboBox2中的数值,如果是原来ComboBox1对应列中已有的值,就直接向下进行,如果原来ComboBox1对应列中没有该值,自动添加到该列最下一个非空行之后再向下执行。

字典的引用:

窗体代码如下:

Public Arr, Dic As New Dictionary    '声明为公共变量,引用“Microsoft Scripting Runtime”

Private Sub UserForm_Initialize() '窗体初始化事件

    Dim Brr

    Arr = Sheet1.Range("A1").CurrentRegion.Value    'A1单元格已用区域

    For i = 1 To UBound(Arr, 2)    '循环标题,并添加到字典

        If Not Dic.Exists(Arr(1, i)) Then    '字典中不存在关键字

            Dic.Add Arr(1, i), Dic.Count + 1    '添加关键字,Item为索引

        End If

    Next

    Brr = Dic.Keys

    Me.ComboBox1.Clear    '清除列表框1条目

    For i = 0 To UBound(Brr) - 1    '列表框1添加条目

        Me.ComboBox1.AddItem Brr(i)

    Next

End Sub

Private Sub ComboBox1_DropButtonClick() '列表框1下拉事件

    Dim Brr

    If Me.ComboBox1.Text = "" Then Exit Sub    '如果列表框1为空,就退出过程

    Me.ComboBox2.Clear    '清空列表框2条目

    If Dic.Exists(Me.ComboBox1.Text) Then '如果列表框的关键字,在字典中有记录

        Brr = Application.WorksheetFunction.Index(Arr, 0, Dic(Me.ComboBox1.Text)) '用Index函数取出整列数据

        For i = 2 To UBound(Brr, 1)    '列表框2添加条目

            Me.ComboBox2.AddItem Brr(i, 1)    '列表框2添加条目

        Next

    End If

End Sub

Private Sub CommandButton1_Click() '按钮1单击事件

    If Me.ComboBox1.Text = "" Or Me.ComboBox2.Text = "" Then Exit Sub    '如果列表框1,2为空,就退出过程

    Dim Brr, Crr

    Brr = Application.WorksheetFunction.Index(Arr, 0, Dic(Me.ComboBox1.Text))    '用Index函数取出整列数据

    Crr = VBA.Filter(Application.Transpose(Brr), Me.ComboBox2.Text, True)    '取出匹配列表框2的值

    If UBound(Crr) = -1 Then  '如果有列表框2的值,数组不会为-1  ,'如果列表框2中没有此关键字,往原数据添加此关键字

        Sheet1.Cells(Rows.Count, Dic(Me.ComboBox1.Text)).End(xlUp).Offset(1).Value = Me.ComboBox2.Text

    End If

    Sheet1.Cells(Rows.Count, 10).End(xlUp).Offset(1).Value = Me.ComboBox2.Text    '+ Me.ComboBox1.Text  '把数据写入单元格

    Me.ComboBox1.Text = "": Me.ComboBox2.Text = ""    '列表框1,2显示为空白

    Me.ComboBox1.Clear: Me.ComboBox2.Clear    '清空列表框1,2的条目

    Call UserForm_Initialize    '初始化窗体,为下一次录入数据准备

End Sub

效果图:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11930847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存