ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1182|回复: 4

[求助] 求教大神给修改一下这个复合框模糊输入自动匹配代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-17 20:27 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原来是表1,现在想修改提取表3的C列3-n行,我改了以后只显前三个,不知道为什么?请大神给看看,哪出错了?
Private Sub UserForm_Initialize()
TextBox1.SetFocus
ComboBox1.ControlTipText = "1" '1才下拉,0不下拉,2TEXTBOX不变动
arr = Sheet3.Range("c3:c" & Range("c65536").End(xlUp).Row)
ComboBox1.List = arr
TextBox2.Text = Date
End Sub
Private Sub ComboBox1_Click() '点击下拉列表项写到文本框
ComboBox1.ControlTipText = "2"
TextBox1 = ComboBox1.Value
ComboBox1.ControlTipText = "0"
End Sub
Private Sub ComboBox1_DropButtonClick() '下拉按钮点击优先于MOUSEUP,如果点下拉就不激活MUOUSEUP事件
ComboBox1.ControlTipText = "0"

End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> 40 And KeyCode <> 38 And KeyCode <> 13 Then '除回车,上下键外,按让一键都激活文本框,便于输入数据
TextBox1.SetFocus
End If
End Sub
Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If ComboBox1.ControlTipText <> "0" Then TextBox1.SetFocus '鼠标点击后激活文本框,这样才能在文本框录入数据
ComboBox1.ControlTipText = "1"
End Sub
Private Sub TextBox1_Change()
If ComboBox1.ControlTipText <> "2" Then '2表示选择了下拉列表项,不触发文本框变动
Dim d
    ww = TextBox1
    arr = Sheet3.Range("c3:c" & Range("c65536").End(xlUp).Row)
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
    If (InStr(1, arr(i, 1), ww, 1) > 0 Or InStr(1, pinyin(arr(i, 1)), ww, 1) > 0) Then d(arr(i, 1)) = ""
    Next
    ComboBox1.SetFocus '必须让COMBOBOX先获得焦点
    ComboBox1.Clear
    ComboBox1.List = d.keys
    ComboBox1.DropDown
    TextBox1.SetFocus
    ComboBox1.DropDown '切回文本框后必须再下拉才行
    End If
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 40 Or KeyCode = 38 Or KeyCode = 13) And ComboBox1.ListCount > 0 Then '回车,向下箭头,进入下拉列表
ComboBox1.SetFocus
ComboBox1.DropDown
ComboBox1.ListIndex = 0
'SendKeys "{DOWN}" '再发个向下键从组合框文本跳到下拉列表第一条
End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox1.ControlTipText = "1" '退出文本框允许再次下拉
End Sub
Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   If ComboBox1.ControlTipText = "1" Then '鼠标移入文本框下拉一次
    ComboBox1.DropDown
    ComboBox1.ControlTipText = "0" '只下拉一次,避免反复触发
    TextBox1.SetFocus
    ComboBox1.DropDown '切回文本框后必须再下拉才行
End If
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ComboBox1.ControlTipText = "1" '鼠标移入窗体允许再次下拉
End Sub
Function pinyin(ByVal r As String) As String '查拼音函数
On Error Resume Next
Const hanzi = "啊芭擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝ABCDEFGHJKLMNOPQRSTWXYZZ"
Dim i As Long, j As Byte, temp As String
For i = 1 To Len(r)
For j = 1 To 24
If Asc(Mid(r, i, 1)) >= Asc(Mid(hanzi, j, 1)) Then temp = Mid(hanzi, 23 + j, 1)
Next
pinyin = pinyin & temp
Next
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-17 21:03 | 显示全部楼层
附件传上来了,大神帮帮我

模糊输入自动匹配.zip

17.37 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-18 20:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自已顶一下吧,要不沉底了

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-19 20:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-21 09:41 | 显示全部楼层

自已顶一下吧,要不沉底了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 21:57 , Processed in 0.022178 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表