学习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所示的效果。你可以根据实际情况,添加功能,譬如选择好后,将选择的数据输入用户信息工作表或者导向到相应的产品页面。
代码的图片版如下: