ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]怎么从下拉菜单中实现快速输入?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-8-31 10:27 | 显示全部楼层 |阅读模式
   这个功能在很多地方都经常见到,突然想到了EXCEL里面能不能实现这个功能!假如在第一张表格中的A列,要输入客户的名称,在第二张表格的A列已经有全部客户的清单,请问能否实现在第一张表格的A2单元格,当单元格输入了第二张表格中客户名称的其中一个字,就在下拉菜单中,把这些包含这个字的客户名称显示出来,这样就可以实现快速输入了!希望大家多帮忙! rSL1OfZv.rar (1.88 KB, 下载次数: 107)

TA的精华主题

TA的得分主题

发表于 2008-8-31 12:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
YND7C2L7.rar (9.65 KB, 下载次数: 604)
[此贴子已经被作者于2008-8-31 13:44:27编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-8-31 13:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼上的老朋友,能不能帮忙注释啊!非常感谢!

TA的精华主题

TA的得分主题

发表于 2008-8-31 14:21 | 显示全部楼层

Sub bbb()
    Application.EnableEvents = False
    Selection.Value = Application.CommandBars.ActionControl.Caption  把选中值填如目标
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Row < 2 Then Exit Sub
    If Target.Column > 1 Then Exit Sub   3种情况下退出
    vl = Target.Value       取值
    If Len(vl) > 1 Then Exit Sub  多于1个字退出
    Target.Select    回到原单元格
    On Error Resume Next
    Set sj = Worksheets("Sheet2")
    ed = sj.[a65536].End(xlUp).Row
    Set rg = sj.Range("a2:a" & ed).Find(vl, LookIn:=xlValues)   找第一个匹配值
    If rg Is Nothing Then Exit Sub   没有就退出
    With Application.CommandBars.Add(Name:="mycell", Position:=msoBarPopup) 设置菜单
        r0 = 1      已查到行
        r = rg.Row  新查到行
        Do While r > r0   新查到比已查到大就继续
            r0 = r
            With .Controls.Add(Type:=msoControlButton)  设置菜单项
                .Caption = rg.Value   把查到值作为显示值
                .OnAction = "bbb"     如选择此项运行bbb
            End With
            Set rg = sj.Range("a2:a" & ed).FindNext(rg)   找下一个
            If Not rg Is Nothing Then r = rg.Row     如果找到了取新查到行值
        Loop
    End With
    If Application.CommandBars("Mycell").Controls.Count = 1 Then  如果仅查到1项
        Application.EnableEvents = False
        Selection.Value = Application.CommandBars("Mycell").Controls(1).Caption   把值直接填入目标
        Application.EnableEvents = True
    Else
        Application.CommandBars("Mycell").ShowPopup    否则弹出菜单
    End If
    Application.CommandBars("Mycell").Delete   删除菜单
End Sub

TA的精华主题

TA的得分主题

发表于 2008-10-18 17:04 | 显示全部楼层

这种功能在会计中也经常用到,不知能不能只在输入第一个字后,不用回车,就能达到楼主后说的功能?

TA的精华主题

TA的得分主题

发表于 2009-2-16 13:49 | 显示全部楼层

回复 2楼 hupanshan 的帖子

代码是否能放到模块里呀?

TA的精华主题

TA的得分主题

发表于 2009-2-16 14:34 | 显示全部楼层
原帖由 dy_ysl 于 2008-10-18 17:04 发表
这种功能在会计中也经常用到,不知能不能只在输入第一个字后,不用回车,就能达到楼主后说的功能?

这是用单元格“变更”驱动的程序,只有回车或者选择了别的单元格才能确认“变更”。

TA的精华主题

TA的得分主题

发表于 2009-2-16 14:35 | 显示全部楼层
原帖由 wbqjb 于 2009-2-16 13:49 发表
代码是否能放到模块里呀?

据我所知,单元格变更的程序只能放在Sheet里

TA的精华主题

TA的得分主题

发表于 2009-2-16 23:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请问如何能实现在第一张表格所有单元实现这种功能啊,怎么做请指点一下。谢谢!!

TA的精华主题

TA的得分主题

发表于 2009-2-17 00:03 | 显示全部楼层
hupanshan 老师很热心啊,到处都能看到你回的贴,都是精品,只是我看不明白代码,就是想借用也不会改呀
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 11:48 , Processed in 0.046057 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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