ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 犯晕的类模块

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-26 00:21 | 显示全部楼层
也不会写类,实在要用的时候只会用VB6的类设计器来搭好架子,然后再自己在架子上修改于添加需要的功能,这样的方法还不错,可以试试。
2012-08-26_001919.png
2012-08-26_001908.png

点评

非常感谢,非常感谢  发表于 2012-8-26 05:54

TA的精华主题

TA的得分主题

发表于 2012-8-26 01:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yiyiyicz 发表于 2012-8-25 23:21
是针对实际应用的
首先,我把它和软件框图联系起来。一个个框图(特别是计算逻辑的)想象成类模块的实 ...

使用类来编程,需要改变你的编程思路,忘记普通的vba代码流程的方式吧。

所谓类模块,就是你先自己做个工具,然后用工具来干活。由于使用了工具,工具应该是通用的、有若干定义的东西,所以会造成代码思维的疑惑。

因此,你在犯晕之前,要考虑你需要什么工具,而不是考虑你需要什么功能。这样你就能写出来类模块的应用代码了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-26 06:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yiyiyicz 于 2012-8-26 09:00 编辑
liucqa 发表于 2012-8-26 01:14
使用类来编程,需要改变你的编程思路,忘记普通的vba代码流程的方式吧。

所谓类模块,就是你先自己做个 ...


“忘记普通的vba代码流程的方式吧”
这要看怎么理解
对于工程技术,都是按照继承、发展的规律向前的。编程也不例外
学习了VBA的语法和一些技巧,能够实现单一的功能了。
但是面对功能复杂,且还要不断的充实、改进的,的确显得力不从心,需要更好的方法
比如说,面向对象的方法,也就是从考虑我需要什么样的功能开始,搭起框架,细化。有些通用的功能做成构件;有些要根据前面的结果才能确定后面的结论,需要继承或者是多态;等等
但是,构造函数、过程、模块、类模块,还是VB/VBA编程。所以之前的东西不能丢掉。换句话说,也许有更巧的实现方法,但我就会笨办法。行不行呢?当然行。这在编码过程中经常遇到
当然,有些习惯可能一开始就不太好
比如我习惯于
dim d as new dictionary
另外一种,在某些时候可能更加合理
dim d as object
Set d = CreateObject("Scripting.Dictionary")
特别是,对于我等草莽出身的编程。想到哪里写到哪里。在采用面向对象方法后,思维需要改变
说白了,我们现在是土匪,想当八路了,正规一点

TA的精华主题

TA的得分主题

发表于 2012-8-26 18:17 | 显示全部楼层
VBA的类方便做封装和继承(其实是接口),多态是说不上了,硬要做出来的话...反正语言方面没有较强的支持。

认真来说,你如果有类设计的实际需要,在VBA里这个类一般是给你提供数据和计算、属性功能的,正常”的VBA 和VB相比,它少了类设计器,所以接口和属性这些语句还要手工加,有点麻烦,


但是,在你的要求里,如果要呈现出实例对象不但有计算,而且还有图形和鼠标事件方面(与计算相结合的)的处理,VBA的CLASS就太弱了一点,换成用VB或.NET生成类,发布ACTIVEX控件或AUTOMATION控件(也就是能够SET X=CREATEBOJECT("你的类库 .你的某个组件"))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-26 19:33 | 显示全部楼层
hiyou 发表于 2012-8-26 18:17
VBA的类方便做封装和继承(其实是接口),多态是说不上了,硬要做出来的话...反正语言方面没有较强的支持。

...

本人的基础还是不够
还需要补

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-26 20:39 | 显示全部楼层
本帖最后由 yiyiyicz 于 2012-8-26 21:15 编辑
doryan 发表于 2012-8-25 23:52
我最近看JAVA 对以前类模块中比较迷糊的地方豁然开朗
JAVA是面向对象的语言
你可以理解成


的确是思路问题
这些思路也需要编码工具(技术)的支持,比如
第一个是建立类模块的基础技术
第二个是消息的传递。虽然都是要把已经有的数据传递到需要它的地方去。不过模块是用变量传递,而类模块则用成员方法来传递
有了上面的基础,就怎么用的问题,即思路
类模块和面向对象的理念联系紧密。假如面向对象是在斟酌怎么把复杂的功能用程序实现的思维方式,它是一种抽象思维方式。“依赖于抽象而不依赖于现实”,“抽象容易,对事物合理抽象难。在编程思考中把握粒度是重点”
如果说面向对象是一种编程方式,那他的焦点在封装、继承和多态三个方面。仅从概念考虑,三者是有顺序的。没有封装就没有继承,没有继承也就不可能有多态。可以认为继承往往是中间步骤,真正的目的是多态。按照在EH学到的知识,VBA只有多态,没有继承。虽然有缺憾,但是用VBA仍然可以操练“类模块---面向对象”
封装
以前是从头到尾,代码都写道一起。现在则是要把他们若干块。每个块之间的关联程度降到最低,使得避免“牵一发而动全身”,不至于之前的工作一下子崩溃
能见度
既然是要减少关联程度,那就涉及到我的一些隐私不要暴露给别人看(类模块)。也就是不需要别人知道的就不让别人知道
但具体到哪些要归入隐私,却需要斟酌。都不是隐私不行,复杂度立刻上升,程序也容易出错;全都是隐私,效率马上没有了,也很难扩充。
继承
这是我们关心的主要内容,代码重用/界面重用。
继承带来的代码重用,是子类自动沿袭父类的所有代码,让我们少写点代码,只是需要稍微的扩充和修改后就能符合要求。这时候,父类和子类是分别独立存放的
多态
如此一番组合,就形成了多态。
毫无疑问,如果我们不想重用代码,不想重用界面,不想再扩充,不想进行修改。那么通过继承而得到的子类,几乎没有意义。


TA的精华主题

TA的得分主题

发表于 2012-8-26 21:56 | 显示全部楼层
yiyiyicz 发表于 2012-8-26 20:39
的确是思路问题
这些思路也需要编码工具(技术)的支持,比如
第一个是建立类模块的基础技术

比我理解的都透彻啊
文字表达能力一直是我的短板 哈哈
都说VB是面向过程和面向对象语言的结合
而在EXCEL的VBA中 几乎99%都在面向过程
起码我是这样的
用一个过程来解决问题   代码是想到哪里写到哪里 是个坏习惯

现在开始改了 自己开始写一些模块来重复使用 模块的作用大概可以归集为静态类
所以作为工具类还是比较方便的
但是在VBA中 除了构建控件数组 类似的东西 我实在想不到什么地方必须要用类模块

我的理解是学习VBA是实用性 如果要研究性 从思想就开始高效 还是JAVA C++吧
比如我学习JAVA的时候 弄明白了我一直迷糊的 指针 堆栈 等等
了解了指针 对数组的概念就深刻了
了解了 栈 对于递归的原理也深刻了

我还记得我刚开始学VBA的时候 传递参数总让我烦  直接全部全局变量 哈哈 最后给变量起名都恼死我了

关于类模块中的成员
我写的时候遵循的原则就是
对于成员变量 判断它是否可以自由读取 如果有一定规则 那就私有化 提供方法来访问
对于成员函数 对于中间函数 私有 其他公开
没觉得对纠结啊

VBA中类模块如果要实现比较通用 复杂的功能 几乎可以放弃
如果有兴趣 不如直接编成ActiveX Dll中的类

TA的精华主题

TA的得分主题

发表于 2012-8-26 22:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
呵呵,很想找本书来看

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-27 00:20 | 显示全部楼层
doryan 发表于 2012-8-26 21:56
比我理解的都透彻啊
文字表达能力一直是我的短板 哈哈
都说VB是面向过程和面向对象语言的结合

基本是抄的

TA的精华主题

TA的得分主题

发表于 2012-8-27 11:04 | 显示全部楼层
功力太浅,只写过一些简单的类,完全看不懂你们在说什么。更不知道什么是面向过程,面向对象,看来是时候接触一些VB的东西了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-26 22:10 , Processed in 0.037274 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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