利用数据有效性制作的excel下拉列表,如果选项过多,会给选择输入带来不少的麻烦。如果能输入一个或几个字符,(更甚至只输入汉字首字母)就只显示以这些字符开头的选项(联想式输入),该多好哦!接下来我就给大家分享用VBA实现联想式输入的技巧。
我们分两节讲解VBA联想输入,第一节讲最简单的情况:输入一个或几个字符,显示以这些字符开头的选项。
▶准备工作:
①引用Microsoft Forms 2.0Object Library库
在VBE窗口-工具-引用中勾选Microsoft Forms 2.0Object Library。若在界面中未找到MicrosoftForms 2.0 Object Library库,则需要浏览引用,目录为C:\windows\system32\fm20.dll
②这里要用到ActiveX控件中的ListBox控件和TextBox控件。
组合框需要在设计模式下,人为事先添加。添加的位置为需要联想输入的区域列。任意单元格都可以。插入后效果如下图:
▶实现代码:
将如下代码写入VBE的sheet(“压延”)中。查询的数据库放在sheet(“品名”)中。
Private Sub ListBox1_Click()
ActiveCell = ListBox1.Value '单击Listbox1中的数值,写入活动单元格
ListBox1.Visible = False
TextBox1.Visible = False
End Sub
Private Sub TextBox1_Change()
On Error Resume Next
Me.ListBox1.Clear
Dim ARR, ARR1(), k As Integer, sss As String
ARR = Sheets("品名").Range("B2:B"& Sheets("品名").Range("B65536").End(3).Row)
'将sheet("品名")中B列数据作为查询数据库
k = 0
If Me.TextBox1.Text = "" Then Exit Sub
ReDim ARR1(1 To 1)
For X = 1 To UBound(ARR)
If ARR(X, 1) Like "*" &TextBox1.Text & "*" Then '模糊匹配查询符合条件的字符
k = k + 1
ReDim Preserve ARR1(1 To k)
ARR1(k) = ARR(X, 1) '将符合条件的字符写入数组ARR1
End If
Next
Me.ListBox1.List = ARR1 '将ARR1写入Listbox1
End Sub
Private SubWorksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 And Target.Row > 3 And Target.Count = 1 Then
'将目标单元格设置为H列,不可单选
TextBox1.Top = ActiveCell.Top '设置textbox1的高度
ListBox1.Top = TextBox1.Top + TextBox1.Height'设置Listbox1的高度
ListBox1.Visible = True
TextBox1.Visible = True
TextBox1 = ""
TextBox1.Activate
Else
ListBox1.Visible = False
TextBox1.Visible = False
End If
End Sub
这样子,就可以实现文章开头的VBA联想输入效果,这是最简单的一种联想输入,下节课,我给大家分享一个终极联想输入的例子。
实例微云连接:http://url.cn/5e0eKHk
不懂的地方均可以在下方留言给我。
关注公众号,带你每日学习VBA,从枯燥机械的工作中解放双手。
一个干货满满的公众号,期待你的关注
联系客服