ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 列表法输入,提高工作效率(更新已完成)

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 07:49 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据验证
原帖由 AVEL 于 2011-6-11 22:11 发表
还可以用 indirect函数来做数据有效性的联动 效果也很好。

比用VBA要简单方便。

兄弟,你好,你没有完全注意吧,用函数来做联动有它的局限性,所以才选用VBA的。用vba有个好处就是能实现双双动态连动。用函数也可能实现,但是非常复杂,我曾试图使用。

[ 本帖最后由 ctp_119 于 2011-6-13 08:00 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 07:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 AVEL 于 2011-6-11 22:26 发表
938532

我第四种方法就是这种效果,你没有查看有效性设置吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 08:12 | 显示全部楼层
  1. Private Sub Worksheet_Deactivate()
  2. Dim cn As New ADODB.Connection
  3. Dim lastrow As Integer
  4. Dim ddh As String
  5. Dim i As Integer
  6. Dim j As Integer
  7. Dim y As Integer
  8. Dim p As Integer
  9. Application.ScreenUpdating = False
  10. With Worksheets("辅助表")
  11. .Cells.ClearContents
  12. .Range("A1:B1") = Split("订单号 货号")
  13. cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source= " & ThisWorkbook.FullName
  14. Sql = "select distinct 订单号 from [sheet3$]"
  15. .[a1].CopyFromRecordset cn.Execute(Sql)
  16. .Cells(1, 1).Value = "订单号"
  17. cn.Close
  18. Set cn = Nothing
  19. lastrow = .[a65536].End(xlUp).Row
  20. .Range("a2:a" & lastrow).Name = "订单号"
  21. Set rng = Sheets("sheet3").Range("a65536")
  22. For i = 2 To lastrow
  23. ddh = .Cells(i, 1).Value
  24. p = 0
  25. x = Application.WorksheetFunction.CountIf(Sheets("sheet3").Columns("A"), ddh)
  26. For j = 1 To x
  27. Set rng = Sheets("sheet3").Columns(1).Find(ddh, rng, xlValues, xlWhole, xlByColumns)
  28. huohao = rng.Offset(0, 1).Text
  29. y = Application.WorksheetFunction.CountIf(.Rows(i), huohao)
  30. If y < 1 Then
  31. .Cells(i, j + 1 + p) = huohao
  32. Else
  33. p = p - 1
  34. End If
  35. Next j
  36. .Range(.Cells(i, 2), .Cells(i, j + 1 + p)).Name = ddh
  37. Next i
  38. End With
  39. Application.ScreenUpdating = True
  40. End Sub
复制代码
可能很多人对程序法有效性设置不解,特作一下说明:以上代码是基础工作,目的是向隐藏的工作表(辅助表)中导入型号的唯一性,并且型号相对应的货号唯一性,并把订单号作为该订单号里面的货号定义为名称。以便后面有效性代码应用。
如果订单号里面有“-”,请改为下划线,否则程序会报错。(特别提示)
下午再补充一种listbox列表快速输入法。敬请期待……但非最后一种或最后的一种输入法。

[ 本帖最后由 ctp_119 于 2011-6-13 08:19 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-6-13 08:50 | 显示全部楼层
原帖由 ctp_119 于 2011-6-11 17:02 发表

我用2010版本都可以哟,你启动宏了没有?

我启用宏了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 09:06 | 显示全部楼层
原帖由 iris00 于 2011-6-13 08:50 发表

我启用宏了。

双击单元格了吗?如果不行,可以和我临时QQ会话。或远程看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 12:53 | 显示全部楼层
第七种方法,listbox控件输入法。
在这里我想到了曾经有人发帖问,怎么通过日期控件选择输入日期,本质上和这个方法是一样的,甚至还要简单些,因为无需添加列表。希望大家借鉴的同时要触类旁通。自己多加操作。勤动脑的同时勤动手,我相信你会得到意外的收获!

列表输入法.rar

186.09 KB, 下载次数: 1731

TA的精华主题

TA的得分主题

发表于 2011-6-13 14:34 | 显示全部楼层
原帖由 ctp_119 于 2011-6-13 09:06 发表

双击单元格了吗?如果不行,可以和我临时QQ会话。或远程看看。

我双击后没有出现下拉框,而是直接选中单元格了。

TA的精华主题

TA的得分主题

发表于 2011-6-13 14:41 | 显示全部楼层
我重新试了下,好像好用了呢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-13 14:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 iris00 于 2011-6-13 14:41 发表
我重新试了下,好像好用了呢。

哦,,能用就行!

TA的精华主题

TA的得分主题

发表于 2011-6-13 16:39 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 16:31 , Processed in 0.042072 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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