大家好,我是有爱捣鼓excel的珠珠!

先来看一个实例:

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

这种产品分类涉及到三级的类别,像平时我们一般会用函数公式来做,函数公式做起来比较复杂,数据源变动时需频繁调整公式,容易出错。

通过双击单元格,弹出窗件,数据量少时可以通过选择后双击,写入到相当的单元格里。数据最大时,可以通过关键字来查找到所需的数据,数据源的增减无需再去改动。

现在我们来看看怎么做?

第一步:创建窗体

首先,我们得右击“ThisWorkbook”,在菜单里选“插入-用户窗体”。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

然后,调整一下窗体的大小,让它看起来更舒服。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

接着,在窗体的属性里,把名称改成“产品信息”,这样更直观。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

然后,我们选工具箱,在窗体上画出几个标签,依次把名字改成:“输入关键字”、“商品类别”、“商品小类”、“商品名称”等,这样用户就知道要输入或选择什么了。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

再画一个文本框,用来输入关键字;还有一个列表框,用来显示匹配的结果。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

第二步:编写代码

接下来,就是编写代码的时候了。

Private Sub TextBox1_Change()
Dim brr, crr
Set ws = Sheets("商品信息")
arr = ws.Range("D5:I" & ws.Cells(Rows.Count, "D").End(xlUp).Row)
Me.ListBox1.List = arr
If Len(TextBox1.Text) >= 1 Then
ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
If InStr(arr(i, j), TextBox1.Text) Then found = True
Next
If found Then
n = n   1
For j = 1 To UBound(arr, 2)
brr(n, j) = arr(i, j)
Next
found = False
End If
Next
Me.ListBox1.Clear
Me.ListBox1.List = brr
End If
End Sub

这段代码的作用是,当用户在文本框里输入关键字时,列表框里会显示匹配的结果。

双击列表框,写入这段代码

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
n = Me.ListBox1.ListIndex
ActiveCell.Value = Me.ListBox1.List(n, 0)
ActiveCell.Offset(0, 1) = Me.ListBox1.List(n, 1)
ActiveCell.Offset(0, 2) = Me.ListBox1.List(n, 2)
ActiveCell.Offset(0, 3) = Me.ListBox1.List(n, 3)
ActiveCell.Offset(0, 5) = Me.ListBox1.List(n, 4)
Unload Me
End Sub

这段代码的作用是,当用户双击列表框里的某一项时,该项的数据会被写入到当前激活的单元格及其相邻的单元格里。

最后,双击窗体,写入以下代码来初始化列表框:

Private Sub UserForm_Initialize()
Set ws = Sheets("商品信息")
arr = ws.Range("D5:I" & ws.Cells(Rows.Count, "D").End(xlUp).Row)
Me.ListBox1.List = arr
Me.ListBox1.Font.Size = 10
End Sub

第三步:设置触发条件

然后,我们在左边双击你要放这个窗体的工作表,写入以下代码来设置触发条件:

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

这段代码的意思是,当用户双击指定范围内的单元格时,会弹出我们的“产品信息”窗体。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 4 And Target.Row > 6 And Target.Row < 15 And Target.Count = 1 Then
产品信息.Show
Cancel = True
End If
End Sub

运行时就会出现这样的窗体:

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

第四步:准备商品信息表

当然啦,别忘了准备一张商品信息表,把商品信息读到列表框中。这样,我们的窗体就能正常工作了。

EXCEL关键字一搜,三级菜单录入不再愁!更多级下拉菜单瞬间搞定-趣帮office教程网

怎么样,是不是很简单?以后再也不用为复杂的产品分类函数公式头疼了!快来试试吧!