ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

工作表、工作簿和模块的区别;类与模块

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-8 14:24 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:类和类模块
后面会用到的一个例子MYCLASS示例 S722RIV3.rar (9.86 KB, 下载次数: 2147)

假设同样是上面那个MYCLASS类模块(里面有个PUBLIC X)
对照一个标准模块,它的名字叫MOD1,它也定义了一个PUBLIC INTERGER X
在两个模块中都各写一个相同的HELLO子程序:
'——————————
PUBLIC  SUB HELLO()
MSGBOX X
END SUB
'——————————
首先,调用MOD1.HELLO可以直接显示出X的值(默认是0)
MYCLASS正如前面所说,它是一份“图纸”,没有实例之前
不可以用MYCLASS.HELLO这种形式调用,因为HELLO根本找不到X这个变量
这行代码会出错:
MYCLASS.HELLO  '错误!
我们再做如下工作
'——————————————
DIM P AS NEW MYCLASS
DIM A AS NEW MYCLASS
DIM X AS NEW MYCLASS '请注意!这个X跟MYCLASS里的X不一样!
P.X=3
A.X=4
X.X=5
P.HELLO
A.HELLO
X.HELLO
'——————————————


大家有没有注意到一个问题,上面同样是SUB HELLO一模一样的代码,一个字都没有改,更没有任何参数,这是一个很简单的子程序,但在P,X,A三个实例对象中,为什么运行时却显示出三个不同的结果?

标准模块MOD1的HELLO是朴实无华的HELLO,它取X这个参数也没什么地方可取,X就摆在那里了,
但MYCLASS的X不一样,不同的X,跟着不同的对象,比如P.X,还有A.X,有X.X,在类里的HELLO程序,
怎么分清这些X,让MSGBOX显示不同的X呢?

事实上,在类模块中的子程序(或函数),总是隐藏着传入了一个参数,这个参数是代表对象本身的ME,
(在C++中称为this),真正的MYCLASS类子程序HELLO“原形”是这样的
PUBLIC SUB HELLO(ME as MYCLASS)  '<==不要这样写,只是做一个说明

在MYCLASS中显示MSGBOX X的时候,实际上是 MSGBOX ME.X
这样一来,象上面那个P.HELLO 在VBA内部运行时,真正的运行原形其实就是A.Hello(P)  传了它本身作为参数
而A.HELLO、X.HELLO也是类似的,相当于A.HELLO(A),X.HELLO(X)

明白了吗?在类模定义的子程序和函数,它们会比标准模块同样的程序/函数定义多传进一个隐藏的参数,这个参数是ME
(但有一个例外,你定义为STATIC的静态函数不会带隐藏参数,这个以后再说)

p.s.顺便说说困扰了很多朋友的一个问题,为什么不允许THISWORKBOOK的自定义函数当成公式使用
如前面所述,标准模块的函数/程序是比较简单的,你给了一个参数列表,就照样传进去了,另外,标准模块的数据跟类不一样,不会重复(比如你不能在两个标准模块中定义同样的HELLO子程序)。
工作表使用的公式,要的是统一函数格式,就是标准模块的普通函数传递格式(工作表运算时也没有必要找某个对象的隐藏参数),而类里面定义的函数,总是比想象中多了一个参数ME,不合要求......

[此贴子已经被作者于2006-6-26 10:44:43编辑过]

XDPMEQpM.rar

9.48 KB, 下载次数: 3833

工作表、工作簿和模块的区别;类与模块

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

菜鸟谢谢了

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:32 | 显示全部楼层

哎,待哪天脑筋清醒的时候,再慢慢瞧。

被这里的绕弯弯的概念弄迷糊了。

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢楼主。

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哈哈,喜欢楼主幽默的语言,又学了不少了[em17]

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:56 | 显示全部楼层

hiyou,谢谢你![em17][em17][em17][em17]

  论坛上关于类的东西很少,希望hiyou兄多多发表自己的一些精辟见解供大家学习。

TA的精华主题

TA的得分主题

发表于 2006-6-8 15:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
支持原创,同楼上

TA的精华主题

TA的得分主题

发表于 2006-6-8 18:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-8 18:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

vb,我学了,我已经在用了,楼主提到的我也问了,但始终没有答案,今天这里的每一句话都说到我心坎上,总于搞清楚了他们的关系。

虽然这是基础的东西,表面上好象对应用也“没关系”,但我心中总有一个结,却对进一步深入学习也非常不利,谢谢楼主,伟大。

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

本版积分规则

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

GMT+8, 2024-12-5 10:03 , Processed in 0.059820 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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