ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

   
EH云课堂-专业的职场技能充电站 限时送,魔方网表将Excel变在线系统 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 2871|回复: 10

[Excel 程序开发] [第20期]送福[已总结]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-2-1 08:46 | 显示全部楼层 |阅读模式

根据广为流传的小游戏改编。
题目要求:
详见附件。

[此贴子已经被作者于2007-2-21 18:35:40编辑过]
单选投票, 共有 3 人参与投票

距结束还有: 5535 天16 小时27 分钟

您所在的用户组没有投票权限

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-1 21:49 | 显示全部楼层

答案已发送至qeeyong@126.com


QUOTE:
这是一头耍赖的猪猪,她耍赖的方式是通过有效性“权利”限制了我选择福前数。
代码的协调做得不错。春节快乐!
                                                                       —qee用
[此贴子已经被qee用于2007-2-21 18:00:19编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-4 11:33 | 显示全部楼层

答案已发送


QUOTE:

审题有偏差,也是会耍赖猪猪,当我得到福数的前一个数,猪猪会重复我的数。
巧用doevents代替工作表事件,构思不错!春节快乐!
                                                                    —qee用

[此贴子已经被qee用于2007-2-21 18:03:15编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-5 11:02 | 显示全部楼层

抢先给大家送福了,呵呵。(这个游戏貌似吴宗宪爱玩)

qee兄看看收到没?没有俺再发。


QUOTE:

8错,8错!我喜欢!!
福来的简而悦,加1分。春节快乐!
                                                                    —qee用

[此贴子已经被qee用于2007-2-21 18:06:30编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-6 08:24 | 显示全部楼层

答案已经发送

QUOTE:

呵呵,真是无巧,耍赖方式也是一样,当我得到福数的前一个数,猪猪会重复我的数。
数据有效性的理解不符合题意,Worksheet_Change中的首句判断使用ActiveCell,当默认的选项设置ENTER键移动方向为向右时,代码无法继续运行,一般这儿可以使用
If Target.Column <> 7 Or Target.Row < 3 Or mblnInitial Then Exit Sub
借助全局变量禁止事件触发,构思不错。总的看,代码做得用心,也规范,详尽的注释更是难得。春节快乐!
                                                                    —qee用


[此贴子已经被qee用于2007-2-21 18:09:32编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-13 14:12 | 显示全部楼层

答案已发送。

收到没?

QUOTE:
审题忽略了恢复初始状态的要求。
代码结构清晰,功能基本实现。春节快乐!
                                                                    —qee用


[此贴子已经被qee用于2007-2-21 18:12:49编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2007-2-20 15:24 | 显示全部楼层

答案已发送

QUOTE:

呵呵,恢复初始状态的要求做得不够彻底。此外有个小暇,如果我不按规则输入数据,在有效性提示错误时选择“忽略”的话,代码不能正确执行。
总体上看,要求基本实现。唯一通过名称设置图形按钮标题的答案,也是本贴试图推介的一个较冷的小技巧。春节快乐!
                                                                    —qee用

[此贴子已经被qee用于2007-2-21 18:15:29编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-21 18:27 | 显示全部楼层


[总结]

    客观地说,做为竞赛题,本题并不难。恰逢春节,主要想添个喜庆。做一下总结:
    1.数数算法
    为了确保送出福数,必须得到福数的前一个数,考虑规则3“当上一次对方数的数距离福数相差在5以内时,可以数比对方大1-5之间的任一数”,这样就必需得到“福数-6”,在此之前,每一回合可控增长为4,只需要减去4N就可以得到起始数。这样,当福数产生后,起始数也就确定了,以后只要比前一次数增4,直到距离福数5以内时,报出福前数就可以了。
    2.代码的协调
    这是本题的另一个知识点,从答案上看,大家协调代码的基本功都不错。在防止代码产生“递归”效应上,一般都恰当地使用了Application.EnableEvents = False,bluestorm80使用全局变量的方法也是重要的方法,在防止非Application事件“递归”的场合经常用到。此外,“一钮两用”,数据在各过程间的传递,f_qc答案中doevents的使用,各有巧意,不多赘言。
    3.图形(窗体)控件的操作(引子
    很多朋友,包括我,喜欢在工作表中使用图型控件和窗体控件(指“视图-工具栏-窗体”或在菜单工具栏右键中的那个“窗体”),喜欢那个小手,喜欢它相比呆板的标准控件更显可爱的样子。但常常让人困惑和失望的是,我们很多想做的事却常常不知道该怎么告诉它,公开的文档也很难找到可以参考的资料。一般情况下,我们首先会想到录制宏,来看一个例子:在你的工作表Sheet1上添加一个窗体控件中的列表框,它的默认名称通常是“下拉框 ?”(此处的问号为数字),改其名称为“CmbTry”,现在开始录制宏,给CmbTry指定数据源C9:C11,录制的宏大体是下面的样子:
Sub Macro1()
    ActiveSheet.Shapes("CmbTry").Select
    With Selection
        .ListFillRange = "$C$9:$C$11"
        .LinkedCell = ""
        .DropDownLines = 8
        .Display3DShading = False
    End With
End Sub
    录制宏给我们提供了Selection的解决方案,你可以把With部分简化成Selection.ListFillRange = "$C$9:$C$11",为了消除CmbTry被选中的宭态,再补加一句activecell.activate,通常情况下,这样也可以知足了。如果你觉得繁琐,试图改成ActiveSheet.Shapes("CmbTry").ListFillRange = "$C$9:$C$11"的话,真的对不起,VBA会告诉你不允许!现在我告诉你,名称允许!上面的代码,只需要[CmbTry].ListFillRange = "$C$9:$C$11"一句就够了。呵呵,不为别的,就为这一点,以后也要想着给你的图形取名哈,你看我是不是这样做了。
    别走开,还有更出彩的。我们仍以CmbTry为例,想一想标准控件ComboBox,可以通过AddItem方法添加列表项,我们的CmbTry却只能通过工作表的区域来指定列表项,有没有办法使用AddItem等方法呢,可也!
添加列表项:
[CmbTry].AddItem "我的项目"
删除第1个列表项:
[CmbTry].RemoveItem 1
显示第1个列表项:
Debug.Print [CmbTry].List(1)
当前值:
注意不是[CmbTry].Value,Value是当前值在列表项的索引号,而是:
[CmbTry].List([CmbTry].Value)
    上述是不能从录制宏得到的,而是一种验证的结果。图形控件使用它近亲标准控件的属性方法也不是完全可以照搬,但通常最重要的方法属性大多都是可以的,部分属性可以参考录制宏的代码得到,在事件的处理方式上,图形控件通过OnAction属性(通过录制“指定宏”的宏可以得到)与代码关联,这一般是最重要和基本的事件,象按钮的Click,组合框的Change。但有了这些,配合灵活的使用智慧,对于我们实现大多数我们想实现的功能已经足够!
    本总结最后部分属本次竞赛题的外延,作为一个小礼物送给大家。但需要说明的是,这只是表象的素描,只是一个引子,更多的更准确的内容,将找时间和大家专文探讨。

[em12]

 

[此贴子已经被作者于2007-2-22 22:37:11编辑过]

TA的精华主题

TA的得分主题

发表于 2007-9-7 16:41 | 显示全部楼层

TA的精华主题

TA的得分主题

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

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,每天学会一个新技能

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

GMT+8, 2019-4-22 16:19 , Processed in 0.244013 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Wooffice Inc.

   

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

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

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