Excel应用实践13:制作产品选型表,在用户窗体中实现级联下拉列表

学习Excel技术,关注微信公众号:

excelperfect

在网站中,我们经常会碰到需要一层层向下选择的情况。在第一个选项列表中选择第一个数据,第二个选项列表中选择第二个数据,依此类推。并且,后面的选项列表内容会根据前面选择的内容而发生变化。如下图1所示。

图1

上图1是使用Excel VBA用户窗体实现的效果,实现起来很简单。

首先,准备数据,如下图2所示。第1列单元格中的值分别是该列下方数据单元格区域的名称,这需要我们事先使用名称功能进行定义。

图2

接着,设计用户窗体,如下图3所示。在VBE中,插入一个用户窗体,在上面放置3个组合框并分别命名为:cmbProduct、cmbModel和cmbSubModel。

图3

编写用户窗体模块代码:

代码语言:javascript
复制
Private Sub UserForm_Initialize()
    '第1个组合框中添加值
    cmbProduct.List =Application.WorksheetFunction.Transpose(Range("产品"))
End Sub
Private Sub cmbProduct_Change()
    cmbModel.Value = ""
    cmbSubModel.Value = ""
    Select Case cmbProduct.Value
    '根据第1个组合框中的值
    '在第2个组合框中添加相应的值
    Case "产品1"
        cmbModel.List =Application.WorksheetFunction.Transpose(Range("产品1"))
    Case "产品2"
        cmbModel.List =Application.WorksheetFunction.Transpose(Range("产品2"))
    Case Else
        cmbModel.Value = ""
    End Select
End Sub
Private Sub cmbModel_Change()
    cmbSubModel.Value = ""
    Select Case cmbModel.Value
    '根据第2个组合框中的值
    '在第3个组合框中添加值
    Case "型号11"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号11"))
    Case "型号12"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号12"))
    Case "型号13"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号13"))
    Case "型号21"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号21"))
    Case "型号22"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号22"))
    Case "型号23"
        cmbSubModel.List =Application.WorksheetFunction.Transpose(Range("型号23"))
    Case Else
        cmbSubModel.Value = ""
    End Select
End Sub

至此,运行用户窗体,即实现上图1所示的效果。你可以根据实际情况,添加功能,譬如选择好后,将选择的数据输入用户信息工作表或者导向到相应的产品页面。

代码的图片版如下: