设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: roych
打印 上一主题 下一主题

Access挑战Excel第三期:级联菜单

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-22 11:42:40 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
看了下站长和小妖姐姐的PK赛,感觉明显攻击力不够,太温柔了。对付Excel,必须出大招嘛!我先来一个Access入门级的级联菜单。如图所示,省市县是乱序的(好吧,我承认,按县来排序的)。


完成效果如下,省市县已经按开头字母排好序,而且是三级菜单:

数据有效性、辅助列、动态数据列、ADO、类模块、数组……只要你能想到的方法都可以用,不过如果使用Access组件,就算输了。
视频制作教程
评分标准如下:
  • 完成静态二级菜单,得分为60分。
  • 完成动态二级菜单,得分为70分。【注:“动态”是指增删部分数据行之后,仍然能够使用】
  • 在原数据顺序情况下完成动态三级菜单,得分为80分。
  • 在原数据乱序情况下完成三级菜单为100。如果下拉菜单显示为顺序,奖励附加分10分。

先上传一个不太标准的答案(辅助表法),省得大家说我空口说白话
游客,如果您要查看本帖隐藏内容请回复

说明:
  • “不太标准”的意思是说,原数据为乱序,下拉菜单也是乱序。——当然,如果再创建一个辅助表进行引用的话,是可以顺序的。
  • 由于数组公式比较占用内存,因此这里只保留100条数据。——如果你的电脑性能足够优秀,可以试试把4000度条记录全部放到原始表中。我的电脑大约需要30秒左右,第二级菜单才可以反应过来。第三级同样需要计算单元格。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2016-3-22 12:05:16 | 显示全部楼层
tmtony 发表于 2016-3-22 11:55
你这样好吗?会不会把Excel参赛者都吓走呢

如果不想弄懂二级下拉菜单的Excel用户,基本只停留在初级水平。
因为二级下拉菜单静态也好,动态也好,至少涉及了定义名称、数据有效性等中级操作。个别函数,也属于中级函数,例如,indirect、offset等等。
我想,没什么理由拒绝学习吧。
3#
 楼主| 发表于 2016-3-23 12:18:09 | 显示全部楼层
pureshadow 发表于 2016-3-23 11:11
动态的问题不大,但乱序的数据有效性不行,要用VBA

就想挑战下小妖姐姐的极限。
我上传的那个答案还是比较low的。
4#
 楼主| 发表于 2016-3-27 11:11:48 | 显示全部楼层
pureshadow 发表于 2016-3-26 17:08
那个Roy,我一直没明白Access这个究竟是怎么做的,能扫下盲不?

Access的主要思路是通过查询来做的。
第一级菜单使用一个分组查询(我习惯用这个),或者使用distinct关键字来得到不重复的省份。
第二级菜单使用以第一级菜单为条件的查询,即 select city from area where province=frmMain!province。这样一来,我们在第一级菜单的更新后事件或者更改事件中刷新第二级菜单的数据源之后,即可得到对应的二级菜单。
第三级如此类推,我一般使用2个条件(省份和市区),在第二级菜单更改后刷新数据源即可。

只要不强制另加条件的话,系统是自动按开头字母排序的。
也正因为这样,数据可以动态增加,而且不管是否顺序。

在实际应用中,新增且乱序是很经常有的事情。例如,生产过程中,新购买的原料,或者销售过程中新增的一些套餐或者产品等等,这些都会在订单流程上使用。如果这些数据非要顺序的话,对于使用者来说,可能不太方便。

当然,这是个人拙见,欢迎大家拍砖。
5#
 楼主| 发表于 2016-4-6 02:12:00 | 显示全部楼层
本题暂时告一段落了。从思路上来看,都达到了要求。总结如下:
1、三级联动菜单中,代码版完全符合要求。当然,这对Excel的要求比较高。
2、函数版基本符合要求,但局限于顺序问题,因此在使用函数版时必须要按A列排好序【按B列排序则会出错】。
3、苏版的同样存在顺序问题。这里不再评述。
4、在多级菜单方面,Access略胜一筹。不过,对于新手来说,需要掌握条件查询,以及稍通代码。
6#
 楼主| 发表于 2017-4-7 11:12:40 | 显示全部楼层
xxx510 发表于 2017-4-7 10:06
这是在没啥稀奇的 N级无限 菜单我早已在多年前就实现了多级菜单非递归算法/示例-全国省市行政区划三级菜单/ ...

静态的估计没问题。随意增删改,乱序等等,做到了再对比access,看看哪个代码写得少。
7#
 楼主| 发表于 2017-4-9 11:09:21 | 显示全部楼层
xxx510 发表于 2017-4-8 14:37
功能的完成根据需求的 ac和ex本来就各有长处 ac集成了sql在查询和表间联动上有天然的优势  没有什么可比 ...

Access右键菜单做不到二级,但是级数再多,对Access来说,也只是多几个组合框罢了。
另外,树控件处理多级菜单也不难。只是需要层层展开,相对代码多些许而已。
如果 说截取上方label的captain并不难,甚至双击任意一条记录直接录入都没问题。我想,你会认同这个意见吧?


说些题外话
----------------------------------
提出这个挑战,主要目的并非为了一定要分出个胜负来,而是通过它,让大家了解到Access有哪些优势,Excel有哪些优势。我们应该如何使用这些优势去改进工作效率。
就拿我这个题目来说吧,Excel不是不能做,——事实上你也看到有Excel的附件了。但是繁琐程度,绝对是比Access要多。——也许你会说改Access,学习成本可能会增加,这个我是认同的。但是,话又说回来,如果真的涉及到这些,用Excel的学习成本就一定比Access少吗?我看未必。例如,VBA代码就比Access的要多很多,是不是?——当然,用上你的插件,可以省掉这部分。不过,也只是学习成本转嫁罢了。
如果你看完全部挑战题,你会发现,我的题目中会尽可能少用代码(完全不用则不太可能),目的也在于降低大家的学习成本,稍稍懂两三句代码就可以做这么多,何乐而不为呢?
我并不奢求大家都要学Access去开发什么,只是希望大家通过这些例子,可以在工作中稍稍运用下,对工作有所帮助就善莫大焉了。我觉得,学完查询之后,大部分情况下已经足够应付繁琐的工作了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-3 16:55 , Processed in 0.098257 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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