分享

VBA联想输入法(一)初探秘

 VBA说 2020-04-07
VBA联想输入法(一)初探秘

利用数据有效性制作的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控件。

组合框需要在设计模式下,人为事先添加。添加的位置为需要联想输入的区域列。任意单元格都可以。插入后效果如下图:

实现代码:

将如下代码写入VBEsheet(“压延”)中。查询的数据库放在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

END

不懂的地方均可以在下方留言给我。

关注公众号,带你每日学习VBA,从枯燥机械的工作中解放双手。

每天学点excel vba

一个干货满满的公众号,期待你的关注

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多