学习Excel技术,关注微信公众号:

excelperfect

在Excel应用程序中,经常使用类模块来创建自已的对象,用于:

1.封装VBA和Windows API代码,使之更易于使用或重用。

2.捕获事件。

3.引发事件。

4.创建自已的对象和对象模型。

创建自已的对象——CCell类模块示例

假设要使用代码来分析单元格,将其中的内容分为下面4种类型:

1.空值

2.标签

3.数值

4.公式

在VBE中插入一个类模块,将其命名为CCell,输入代码:

'创建枚举常量Public Enum anlCellType   anlCellTypeEmpty   anlCellTypeLabel   anlCellTypeConstant   anlCellTypeFormulaEnd Enum '声明模块变量Private muCellType As anlCellTypePrivate mrngCell As Excel.Range '为属性赋值Property Set Cell(ByRef rngCell AsExcel.Range)   Set mrngCell = rngCellEnd Property '获取属性值Property Get Cell() As Excel.Range   Set Cell = mrngCellEnd Property '获取属性值Property Get CellType() As anlCellType   CellType = muCellTypeEnd Property '获取属性值'转换枚举常量为文本Property Get DescriptiveCellType() AsString   Select Case muCellType       Case anlCellTypeEmpty            DescriptiveCellType = "空"       Case anlCellTypeLabel            DescriptiveCellType = "标签"       Case anlCellTypeConstant            DescriptiveCellType = "常量"       Case anlCellTypeFormula            DescriptiveCellType = "公式"   End SelectEnd Property '分析指定单元格Public Sub Analyze()   If IsEmpty(mrngCell) Then       muCellType = anlCellTypeEmpty   ElseIf mrngCell.HasFormula Then       muCellType = anlCellTypeFormula   ElseIf IsNumeric(mrngCell.Formula) Then       muCellType = anlCellTypeConstant   Else       muCellType = anlCellTypeLabel   End IfEnd Sub

在CCell类模块中,创建了一个由4个成员构成的公共枚举常量,每个枚举成员代表一种单元格类型,其值分别默认为0、1、2、3。使用枚举成员可以增强代码的可读性和可维护性,利用DescriptiveCellType属性可将枚举成员的值转换成易于理解的文本。

类模块定义了对象的属性和方法。在类模块中,所有的公共变量或属性过程都可作为对象的属性,所有的公有过程或函数均可作为对象的方法。

属性过程用于控制变量与外界交互,有3种形式:

1.直接对属性赋值

2.使用Set语句为属性赋值对象

3.使用Get语句返回值或对象引用

在CCell类模块中,使用了2个私有的模块级变量来存储属性值:变量muCellType存储单元格的类型,其值为anlCellType枚举成员值;变量mrngCell存储对某个单元格的引用,它表示由CCell类所创建的对象。

在CCell类模块中,使用Set语句给Cell属性指定一个Range型的引用并将其保存到变量mrngCell中。使用Get语句读取属性的值,其中CellType属性以枚举成员值返回所代表的单元格类型,DescriptiveCellType属性以描述性文本返回所代表的单元格类型,因为这两个属性没有对应的Set方法,所以是只读属性。

在实际应用中,基于过程的属性比基于公共变量的属性更好,因为可以更方便地控制给属性赋值和返回属性值。属性过程可以对传递给对象的数据进行检验并执行相应的操作,同时还可以根据需要设置属性为只读或者只写。

在CCell类模块中,定义了一个方法Analyze,是一个子过程,可以分析mrngCell变量所引用的单元格的数据类型,并将单元格数据类型所对应的枚举值赋给变量muCellType。

下面,我们来测试CCell类。

在VBE中,插入一个标准模块,输入代码:

Public Sub AnalyzeActiveCell()   Dim clsCell As CCell       '创建CCell对象的新实例   Set clsCell = New CCell       '确定当前单元格类型并显示   Set clsCell.Cell = Application.ActiveCell   clsCell.Analyze   MsgBox clsCell.DescriptiveCellTypeEnd Sub

类模块可以看成是一种对象模板,根据需要可以创建任意多个对象实例。运行AnalyzeActiveCell过程,显示当前单元格数据类型。

由于在CCell类模块中定义Analyze方法使用的是子过程,因此不能向外部返回值。我们可以以函数形式创建方法,使其可以返回值。例如,将CCell类模块中的Analyze方法转换成函数形式:

Public Function Analyze() As String   If IsEmpty(mrngCell) Then       muCellType = anlCellTypeEmpty   ElseIf mrngCell.HasFormula Then       muCellType = anlCellTypeFormula   ElseIf IsNumeric(mrngCell.Formula) Then       muCellType = anlCellTypeConstant   Else       muCellType = anlCellTypeLabel   End If      Analyze = Me.DescriptiveCellTypeEnd Function

这样,在标准模块中调用类模块来分析单元格的代码可以修改为:

Public Sub AnalyzeActiveCell()   Dim clsCell As CCell       '创建CCell对象的新实例   Set clsCell = New CCell       '确定当前单元格类型并显示   Set clsCell.Cell = Application.ActiveCell   MsgBox clsCell.Analyze()End Sub

用于创建此对象的程序是excel_一起学Excel专业开发22:使用类模块创建对象1相关推荐

  1. excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...

    学习Excel技术,关注微信公众号: excelperfect 对于大多数人来说,使用Excel来做的工作就是在单元格中输入数据,进行一些格式化制作成报表输出,在这个过程中,可能会使用一些公式,可能会 ...

  2. 用于创建此对象的程序是package_【ROS 学习笔记】CMakeLists.txt 与 package.xml

    0. 前言 在 ROS 中,节点的编写语言通常只有 C++ 和 Python,C++ 需要编译后才能运行,Python 则无需编译. 我们知道 Linux 平台编译 C++ 文件,需要编译器和链接器, ...

  3. 在Word文档中插入Excel表格时出现:“用于创建此对象的程序是Excel。您的计算机尚未安装此程序。”试试这个方法

    出现这个错误提示,别急这去重装OFFICE套装,先试试这个方法: 1.右键点击Word,属性,兼容性,取消所有勾选选项. 2.右键点击Excel,属性,兼容性,取消所有勾选选项. 我是用这个方法弄好的 ...

  4. Mobl——用于创建HTML移动应用程序的新DSL

    Mobl--用于创建HTML移动应用程序的新DSL 作者 Abel Avram译者 侯伯薇发布于 2011年2月12日 下午6时44分 http://www.infoq.com/cn/news/201 ...

  5. 创建此对象的程序是quation_MathType出现此对象创建于Equation中的处理教程

    有那么一部份多朋友还不熟悉MathType出现此对象创建于Equation中怎么处理?下面小编就讲解MathType出现此对象创建于Equation中的处理教程,希望对你们有所帮助哦. MathTyp ...

  6. 创建此对象的程序是quation_MathType出现此对象创建于Equation中的问题怎么办

    MathType在文档中编辑公式时那是相当地方便,但是由于MathType是作为第三方软件插入的,所以在使用时经常会出现一些不知名的问题,解决起来头疼.比如很多人会出现MathType停止工作的问题, ...

  7. python中用于创建文件对象的是_Python内置函数________用来打开或创建文件并返回文件对象。...

    内置目前获得目标分子信息的方法不包括 药物对靶标生理活性调节而引起的毒性,函数或创称为 打开对象关于hERG通道描述不正确的选项是 建文件并反映药物分子整体亲脂性强弱的参数 是 有关structure ...

  8. 创建第一个iOS程序

    创建第一个iOS程序 一.准备工作 1. 综合使用基础知识:类 对象 属性 数组 字典 字符 协议 代理 block 2.逻辑思维 3.搭建界面:系统提供的UIKit 自己定义拥有自己风格的控件 1️ ...

  9. sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...

    软件项目实训及课程设计指导--如何应用GOF设计模式中的构建者模式创建复合对象实例 1.GOF设计模式中的构建者模式 构建者设计模式能够将一个复杂对象(它一般为组合类)的构建过程与它的表示部件相互分离 ...

  10. 单元测试源码分析之一创建mock对象

    之前已经介绍过Mockito和PowerMock的常见用法,PowerMock其实就是在Mockito的基础上使用了字节码技术使得其可以对静态方法,私有方法等进行插桩. 现在就先来看看Mockito是 ...

最新文章

  1. 【第41题】【062题库】2019年OCP认证062考试新题
  2. 窗体之间传值的暴力方法
  3. ajax前台multipartfile,在SpringBoot中使用Ajax方式MultipartFile上传失败
  4. tensorflow gpu windows配置步骤教学
  5. python树的实现
  6. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...
  7. 慎用 supportedRuntime
  8. 迪赛智慧数——折线图(渐变堆叠图):国内智能快递柜营收规模及增长率
  9. 新东方雅思词汇(List 21~ List 25)
  10. 计算机学院云毕业,“云端”相约,逐梦起航——计算机与设计学院举办2020届线上毕业典礼...
  11. QT(6)-QStandardItemModel
  12. 微信小程序,动态改变背景图片
  13. 幂律分布图matlab代码,关于幂律分布,你还应该知道如何用代码实现!| 集智百科...
  14. 阿里总部对外解密双11超级工程背后的数据库技术
  15. 既然MAC地址是唯一的,为什么还需要IP地址?
  16. 如何写3DMAX的插件
  17. JavaWeb开发实现一个动态页面
  18. c语言字节变量怎样定义,C语言之定义变量_wx5c99a1487a5ff的博客的技术博客_51CTO博客...
  19. 防止被00后整顿?一公司招聘要求员工不能起诉公司
  20. 具象的东西_腾讯内容开放平台

热门文章

  1. 【leetcode】Copy List with Random Pointer (hard)
  2. 混沌数学之CircuitChaotic(二维离散电路混沌系统)
  3. [转] Js获取 本周、本月、本季度、本年、上月、上周、上季度、去年时间段
  4. Apache使用总结
  5. java array to list iterator_Iterator to list的三种方法
  6. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  7. C#验证字符串是否是数字,是否包含中文,是否是邮箱格式,是否是电话格式
  8. linux实验十shell程序设计,实验二Linux Shell编程.doc
  9. 全网首发:怎样制作CDKEY(7)-新思路
  10. 列出本机JCE支持的Provider、消息摘要算法、公钥私钥算法