news 2026/5/5 2:44:23

VBA中类的解读及应用第三十四讲 枚举的利用----“二师兄”的成长历程之六

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VBA中类的解读及应用第三十四讲 枚举的利用----“二师兄”的成长历程之六

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是VBA中类的解读及应用第三十四讲 枚举的利用----“二师兄”的成长历程之六

【分享成果,随喜正能量】生活就像是一杯苦茶,而情感是茉莉花,调兑在一起,才会馥郁芬芳。人活在世上,有诸多苦楚萦心,若不懂得自我调解,终究会被纷呈的世相掩埋。所以,更多的时候,我们要淡看事世,只有这样,才可淡然前行,自在清明。

第三十四讲 枚举的利用----“二师兄”的成长历程之六

大家好,今日继续类的讲解,到上一讲,我们的pigsy类的羽翼已经逐渐丰满,本篇的内容将让它变得更加专业。

不知道你注意到没有,pigsy类中对Gender(性别)属性的设计存在一点缺陷:我们用私有模块级字符串变量myGender宿主来保存性别数据,既然是一个字符串变量,那就可以往里面保存任何字符串数据,比如“女”,“女性”,“Female”,“男”,“男性”,“male”。虽然字面上都是可以理解的意思,但是写法上都不相同,你无法控制使用者会给myGender赋什么值,这样就会造成信息处理和判断上的混乱。作为一个较为专业的类的设计者,我们要提供一套规范的取值范围。

在上面的文字中,我提到了六个取值,这些值可以说是一个相对固定的常量,我们可以在类中使用像这种固定的常量名称,这种在类中使用常量的方式是非常普遍的。现在我们就来介绍如何在自己的类中使用这种常量。

1 枚举类型(Enumeration)的应用

这种常量实际上是枚举类型(Enumeration)中的一个值。我们在pigsy类的头部,为性别属性定义一个枚举类型pGender:

Public Enum pGender

Female

Male

End Enum

这里的枚举是pGender,其中“p”代表类名“pigsy”我们定义的是公有的(Public)枚举类型,这个枚举类型在整个项目范围内都是可见的,将类名缩写作为前缀有利于与其他类中的枚举类型相互区分。

  • 特别注意点:一般的常量在定义的时候,需要给定一个常量值,可以为各种类型,比如Const PI As Double = 3.14,就是双精度型。但是枚举类型常量很特殊,它只能是长整形(Long)比如Female = 0。但是我们这里连“=0”都没有写。如果什么都没写,叫表示“从0开始,依次加1”,所以上述代码与下述代码是一样的:

Public Enum pGender

Female = 0

Male = 1

End Enum

好了,枚举类型的定义就介绍到这里。我们来看看如何使用它。

  • 可以用Select Case 语句控制返回的枚举值

2 枚举在代码中的实际应用

有了pGender这个类型,我们就可以将性别属性定义为这种类型了。我们将

Private myGender As String 改为Private myGenderA As pGender,将Gender的读写属性做相应修改,相关代码最后效果如下:

Private myGenderB As pGender

Public Enum pGender

Female = 0

Male = 1

End Enum

Public Property Get Gender() As pGender

Gender = myGenderA

End Property

Public Property Let Gender(inGender As pGender)

Static myFlag As Boolean

If myFlag = False Then

myFlag = True

myGenderA = inGender

Else

MsgBox "对不起,二师兄不能做性别修改"

End If

End Property

类修改枚举部分的代码截图:

有了这些修改以后,我们在类的测试代码中,就会发现不一样的效果了,如下图:

通过以上的修正,类的使用者(模块1中的测试代码)在给性别赋值的时候,IDE的智能提示就会自动显示出来,供其选择。

类中的枚举常量使用起来非常简单,但是它极大地增加了类的友好性,也是开发人员专业性的直观体现。是一项投资回报率非常高的技能。

今日内容回向:

1 本讲中讲了枚举,读者是否明白了?

2 本讲的代码中类的属性是否发生了改变?

本讲内容参考程序文件:VBA-CLASS(34).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 2:43:28

wshobson/commands:提升命令行脚本效率的Bash函数库

1. 项目概述:一个被低估的命令行工具集如果你经常在终端里敲命令,尤其是需要处理文件、管理进程或者写一些自动化脚本,那么你大概率会和我一样,对系统自带的那些命令又爱又恨。爱的是它们功能强大,恨的是它们的参数和输…

作者头像 李华
网站建设 2026/5/5 2:42:20

解锁Unity游戏多语言体验:XUnity.AutoTranslator深度解析

解锁Unity游戏多语言体验:XUnity.AutoTranslator深度解析 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过优秀的Unity游戏?XUnity.AutoTranslator作为…

作者头像 李华
网站建设 2026/5/5 2:41:34

利用快马AI十分钟搭建mobaxterm网页版原型,快速验证远程终端设计

最近在做一个远程终端工具的设计方案,需要快速验证几个核心功能的交互逻辑。传统方式从零开发太耗时,于是尝试用InsCode(快马)平台的AI辅助功能,十分钟就搭出了可交互的网页版原型。记录下具体实现思路,给需要快速验证终端类工具的…

作者头像 李华
网站建设 2026/5/5 2:37:29

Vivado里时序报告总飘红?别慌,这5个实战技巧帮你搞定FPGA时序收敛

Vivado时序报告飘红?5个实战技巧助你快速实现FPGA时序收敛 第一次在Vivado中看到时序报告满屏红色警告时,那种手足无措的感觉我至今记忆犹新。作为FPGA开发者,我们都清楚时序收敛的重要性——它直接关系到设计能否在实际硬件上稳定运行。但面…

作者头像 李华
网站建设 2026/5/5 2:32:26

终极地形高度图生成指南:从全球高程数据到3D模型的快速转换

终极地形高度图生成指南:从全球高程数据到3D模型的快速转换 【免费下载链接】heightmapper interactive heightmaps from terrain data 项目地址: https://gitcode.com/gh_mirrors/he/heightmapper Heightmapper是一款革命性的开源高度图生成工具&#xff0c…

作者头像 李华