ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 类-字典-数组-集合-接口-窗体

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-6 11:21 | 显示全部楼层
本帖已被收录到知识树中,索引项:类和类模块
新知识来学习下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-6 21:09 | 显示全部楼层
本帖最后由 hyefeifei 于 2013-11-6 21:11 编辑

接上回:

经常看到有人在属性(Propertylet|set|get xxx)里写大量判断计算的代码,其实这不是一种好习惯,一定要把复杂的代码写在方法(function|sub)里,使属性的值或直接由外部赋给,或由方法计算而来,这样,调用一次方法,属性的值就确定下来了,以后频繁调用属性,就不会重复计算了。但在修改:

Public Property GetDataType() As String

……
End Property
上面这段代码之前,先暂停一下,说点简单轻松的,休息一下脑子,我们来了解一下枚举常量(enum)。
啥是枚举常量呢?假如,我们在程序中经常用到几个数值(必须是长整型long的),那么,我们一定不要在程序中哪句用到这个值,就把它写在哪句里,如果这样的话,经常用到三个值,如果分别写在程序四十个地方,一旦要改起来,就会痛苦不堪了,经常做的是定义三个常量,这就使维护代码非常容易,但我们根据需要及方便程序,有时可以把这三个常量弄成一组,取个名字,这就是枚举类型了。它的语法是:
Enum vcol
3
4
5
      End enum
(以上假如我们经常用红绿蓝三种颜色)

但这还不够,枚举常量必须有一个名字,所以正确的写法是:
Enum vcol ‘vcol是枚举类型的名字
警告=3
表扬=4
正常=5
      End enum
当我们定义了这个枚举类型后,就可以使用它了。
使用枚举类型:
Sub test()
    Dim colorCell As Vcol
    Dim rng As Range, r As Range
假如a2:d10区域有1-100的数值

Setrng = Sheets("sheet2").Range("a2:d10")      

    For Each r In rng
        If r > 80 Then
            colorCell = 表扬
        ElseIf r < 60 Then
            colorCell = 警告
        Else
            colorCell = 正常
        End If
        r.Interior.ColorIndex = colorCell
    Next
End Sub
这段程序,如果我们要表扬由绿色换成黄色,直接在枚举变量的定义中,把表扬的值变为6就可以了:表扬=6
枚举类型的定义中=号及其右边都可省略,例如,可以如此定义:
Enum vcol ‘vcol是枚举类型的名字
警告
表扬
正常
      End enum
这样定义后,系统默认为0,1,2
也就是:
Enum vcol
警告=0
表扬=1
正常=2
      End enum
如果我们不想从零开始,只要数值是连续的,就可以只显式地定义第一个值,后面默认依次加1,可以不写,如

Enum vcol ‘vcol是枚举类型的名字
警告=10
表扬
正常
      End enum
这与下面代码是等效的:
Enum vcol ‘vcol是枚举类型的名字
警告=10
表扬=11
正常=12
      End enum
枚举类型就说到这里吧,再要细了解,就按下F1吧,不过,随着以后用的多了,就会熟悉了,下面我们将在类模块中应用枚举变量,同时不要忘了,把复杂的判断计算移到方法里,不过今天就到此为止吧,容待后续。
不过结束之前,再建议一下,就是虽然function 和sub都可用做方法,但使用的时候,尽量用function,因为它除了可以返回一个值外,其他都和sub一样,额外多返回一条信息,何乐而不为呢?
到此为止的代码,做了一个文件,懒惰的朋友可以下载参照。
类_1.rar (17.88 KB, 下载次数: 181)

TA的精华主题

TA的得分主题

发表于 2013-11-8 12:44 | 显示全部楼层
hyefeifei 发表于 2013-11-6 21:09
接上回:
经常看到有人在属性(Propertylet|set|get xxx)里写大量判断计算的代码,其实这不是一种好习惯, ...

继续呀,不错的总结

TA的精华主题

TA的得分主题

发表于 2013-11-8 20:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享!

TA的精华主题

TA的得分主题

发表于 2013-11-8 22:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
【虽然function 和sub都可用做方法,但用function 比Sub 额外多返回一条信息,何乐而不为呢?】

呵呵,很对! Function当然也可以返回一个数组结果……不止一条信息呢。呵呵。

TA的精华主题

TA的得分主题

发表于 2013-11-8 22:50 | 显示全部楼层
支持,顶一个!好文,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2013-11-8 22:52 | 显示全部楼层
香川群子 发表于 2013-11-8 22:41
【虽然function 和sub都可用做方法,但用function 比Sub 额外多返回一条信息,何乐而不为呢?】

呵呵,很 ...

并非所有 sub 都可以被 function 取代

TA的精华主题

TA的得分主题

发表于 2013-11-8 23:53 | 显示全部楼层
jsxjd 发表于 2013-11-8 22:52
并非所有 sub 都可以被 function 取代

如果是在代码中计算,那么可以。

如果需要直接操作单元格属性……那么Sub是必须的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-9 13:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jsxjd 发表于 2013-11-8 22:52
并非所有 sub 都可以被 function 取代

这位朋友理解错了,如果你想操作单元格,此时你用程序:
sub test ()
[a1].interior.colorindex=3
next
那当然可以完成任务。
但你把sub换成Function。用下面程序:
Function test ()
[a1].interior.colorindex=3
next
也一样可以完成任务,完全可以取代。
换句话说,你用sub能完成的,function同样也能完成,但返过来都不是。

TA的精华主题

TA的得分主题

发表于 2013-11-9 13:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hyefeifei 发表于 2013-11-9 13:16
这位朋友理解错了,如果你想操作单元格,此时你用程序:
sub test ()
[a1].interior.colorindex=3

楼主可以试一下:
自定义一个在单元格中使用的函数,该函数修改某单元格的值。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-27 13:13 , Processed in 0.033946 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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