利用数据有效性制作的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:///5e0eKHk 不懂的地方均可以在下方留言给我。 关注公众号,带你每日学习VBA,从枯燥机械的工作中解放双手。
|