VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量

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

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量ae651fe0d22b4692b46a74bd777279f9.jpeg

【分享成果,随喜正能量】想一想,自己造下的、还没忏悔清净的恶有多少?要想临终不随恶趣,有多困难?按照多数人目前的情况来看,根本没有不堕落三恶趣的把握。但是,只要你一心依止阿弥陀佛,就可以在这一生结束后直接生到净土,彻底脱离恶趣,乃至永超生死苦海。。

第九讲 用WithEvents关键字声明实例化对象类变量

在上几讲中,我们首先定义了类,命名了类的名称,同时定义了类的事件,在事件的定义中我们知道,事件指的是类引发的一个调用;是对象的响应。我们把这个定义再确切一下,事件指的是类引发的一个调用;是类实例化后对象的响应。如果我们把后面的对象变更成实例化后对象,这样就更好理解了。首先命名一个类,然后声明类所响应的事件,但在实际应用的时候必须要把这个类实例化之后才可以用。

引发事件的实例化类对象叫做事件源,为了处理事件源所引发的事件,可以用WithEvents 关键字声明实例化类对象变量。我们再理解一下这句话的意思:在实际的应用中,我们是面对对象的,类对象作为变量出现时,可以响应某个事件,在声明这种对象变量的时候,我们采用的声明语句是WithEvents。

1 使用WithEvents关键字的注意事项

  1)WithEvents 变量不能是派生对象变量。也就是说,不能把它声明为 As Object(当声明该变量时必须指定类名)。

  Eg:错误的写法:Dim WithEvents a as Object

    正确的写法:Dim WithEvents a as Text

 2)不能把 WithEvents 变量声明为 As New,即 WithEvents 关键字和 New 关键字不能同时使用。如果定义成下面这样就会报错:as New Text

3)不能在标准模块中声明 WithEvents 变量。只能在类模块、窗体模块以及其它定义类的模块中声明。

4)虽然WithEvents是Dim,Public,Private语句的关键字,但是不能在过程里面中用WithEvents关键字进行对象变量的声明,只能在通用里使用。

5)只能使用 WithEvents 声明单个变量,不能声明数组。

2 用WithEvents关键字声明类变量的实例

实例讲解:今日我们仍以上讲的例子进行讲解,在上一讲中我们定义了mytime类,在这个类中,我们声明了两个事件如下,一个是UpdateTime,一个是dabiao。

Option Explicit

Public Event UpdateTime(ByVal mynow As Double)

Public Event dabiao()

代码截图:

ced6c428a93e379185ac23f23f267ffa.jpeg

这两个事件是类mytime的事件,要实例化mytime形成对象后要响应的事件。那么实例化mytime形成的对象是什么对象呢?

我在窗体模块代码中进行了withevents的声明:

Private WithEvents mText As mytime

也就是说在窗体中要实例化MYTIME 形成类对象为mText,这个对象是在窗体的构建中实现的:

Option Explicit

Private WithEvents mText As mytime

Private Sub CommandButton1_Click()

TextBox1.Text = "开始计时:"

TextBox2.Text = "0"

mText.TimerTask (9)

End Sub

Private Sub CommandButton2_Click()

End

End Sub

Private Sub mText_dabiao()

TextBox1.Text = "已经达到标准"

DoEvents

End Sub

Private Sub mText_UpdateTime(ByVal mynow As Double)

TextBox2.Text = Str(Format(mynow, "0"))

DoEvents

End Sub

Private Sub UserForm_Initialize()

TextBox1.Text = ""

TextBox2.Text = ""

Set mText = New mytime

End Sub

Private Sub UserForm_Terminate()

End

End Sub

如下面的窗体代码截图:

90d35333e823b51e33a5bf123ffd68bb.jpeg

在窗体的构建函数中利用了Set mText = New mytime把类这个灵魂实例化为肉身对象mText了。

这样,我们就可以用这个对象来响应事件UpdateTime,dabiao了,我们看看窗口提示的事件截图:

9a3f9f71a7452d636d510b5fd03e4a81.jpeg

提示了两个事件,可以利用。

到这里,大家已经逐渐地了解了类的相关知识,比较抽象,但不是很难理解,今后的讲解中将利用这些知识点,实现我们的具体应用。

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

bb27c42cff7d559f343a9724ebc1bd03.jpeg

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


0c01e7d79aaea4207e30e7ba6cb86483.jpeg

3d385e7772dd9df9179c7d73c1ee5c01.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/378648.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nacos配置自动刷新源码解析

文章目录 一、前言二、源码解析1、nacos客户端如何监听服务端配置变化的2、ConfigurationProperties注解的bean是如何自动刷新的3、RefreshScope 注解的bean是如何自动刷新的 三、总结 一、前言 最近好奇 nacos 是怎么做到配置自动刷新的,于是就去debug跟了下源码&…

LeetCode 0993. 二叉树的堂兄弟节点:深度优先搜索(BFS)

【LetMeFly】993.二叉树的堂兄弟节点:深度优先搜索(BFS) 力扣题目链接:https://leetcode.cn/problems/cousins-in-binary-tree/ 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k1 处。 如果二叉树的两个…

C语言:操作符详解

创作不易,给个三连吧!! 一、算术操作符 C语言中为了方便计算,提供了算数操作符,分别是:,-,*,/,% 由于这些操作符都是有两个操作数(位于操作符两边),所以这种操作符也叫做双目操作…

114.乐理基础-五线谱-快速识别五线谱的谱号

内容参考于:三分钟音乐社 上一个内容:113.乐理基础-五线谱-五线谱的调号(二)-CSDN博客 15个调号,如下图,该怎样才能随便拿出一个来就能快速的知道这是什么调号呢? 一共分为三个要点&#xff1…

【芯片设计- RTL 数字逻辑设计入门 11 -- 移位运算与乘法】

请阅读【嵌入式开发学习必备专栏 】 文章目录 移位运算与乘法Verilog Codeverilog 拼接运算符({})Testbench CodeVCS 波形仿真 问题小结 移位运算与乘法 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输…

Redis篇之分布式锁

一、为什么要使用分布式锁 1.抢劵场景 (1)代码及流程图 (2)抢劵执行的正常流程 就是正好线程1执行完整个操作,线程2再执行。 (3)抢劵执行的非正常流程 因为线程是交替进行的,所以有…

python适配器模式开发实践

1. 什么是适配器设计模式? 适配器(Adapter)设计模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。适配器模式充当两个不兼容接口之间的桥梁,使得它们可以一起工作,而无需修改它们的源代码。 …

[linux]:匿名管道和命名管道(什么是管道,怎么创建管道(函数),匿名管道和命名管道的区别,代码例子)

目录 一、匿名管道 1.什么是管道?什么是匿名管道? 2.怎么创建匿名管道(函数) 3.匿名管道的4种情况 4.匿名管道有5种特性 5.怎么使用匿名管道?匿名管道有什么用?(例子) 二、命名…

机器人运动学林沛群——旋转矩阵

旋转矩阵 基本概念 三个主轴,可以看作是三个向量,为b在a的表达,以a为基准 旋转矩阵 B相对于A的姿态: B A R [ A X B ^ A Y B ^ A Z B ^ ] [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A Y ^ B ⋅ Y ^ A Z …

部署一个自己的P站

效果 安装 1.拉取代码 cd /opt git clone https://gitee.com/WangZhe168_admin/logoly.git 2.安装依赖 cd logoly npm install 3.启动 npm run serve 愉快地使用吧

删除和清空Hive外部表数据

外部表和内部表区别 未被external修饰的是内部表(managed table),被external修饰的为外部表(external table); 区别: 内部表数据由Hive自身管理,外部表数据由HDFS管理; …

【网站项目】031网络游戏公司官方平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

详解计算机软件基本概念

软件基本概念 软件的定义 一个完整的计算机系统是由硬件系统和软件系统协同工作来完成某一给定的任务的。 只有硬件的计算机称为裸机,裸机必须安装了计算机软件后才可以完成各项任务。 从广义地讲,软件是指计算机程序、数据以及开发、使用和维护程序…

初识 Protobuf 和 gRpc

初步了解 Protobuf 和 gRpc Protocol Buffers Protocol Buffers(又称protobuf)是谷歌的语言无关、平台无关、可扩展的机制,用于序列化结构化数据。您可以在protobuf的文档中了解更多关于它的信息。 ProtoBuf 的定义 ProtoBuf是将类的定义…

如何在Linux上部署1Panel运维管理面板并实现无公网ip远程访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

【大数据】Flink on YARN,如何确定 TaskManager 数

Flink on YARN,如何确定 TaskManager 数 1.问题2.并行度(Parallelism)3.任务槽(Task Slot)4.确定 TaskManager 数 1.问题 在 Flink 1.5 Release Notes 中,有这样一段话,直接上截图。 这说明从 …

【lesson48】进程通信之system V(信号量)

文章目录 信号量理解 信号量理解 为了进程通信—>我们需要让不同的进程看到同一份资源---->我们之前讲的所有通信方式,本质都是优先解决一个问题:让不同的进程看到同一份资源。 让不同的进程看到了同一份资源,但是也带来了一些问题&a…

nacos安装手册

1. 单机模式 1.1 准备安装介质 nacos-server-2.1.1.tar.gz1.2 环境准备 1台服务器安装JDK 1.8 1.3 解压 tar-zxvf nacos-server-2.1.1.tar.gz1.4 启动 进入解压的nacos目录,进入bin目录,运行: ./startup.sh -m standalone1.5 验证 na…

Markdown:简洁高效的文本标记语言

引言 在当今信息爆炸的时代,我们需要一种简洁、高效的文本标记语言来排版和发布内容。Markdown应运而生,它是一种轻量级的文本标记语言,以其简单易学、易读易写的特点,成为了广大写作者的首选工具。本文将介绍Markdown的语法优缺…

如何修复Mac的“ kernel_task” CPU使用率过高的Bug?

当计算机开始缓慢运行时,这从来都不是一件有趣的事情,但是当您弄不清它为何如此缓慢时,甚至会变得更糟。如果您已经关闭了所有程序,并且Mac上的所有内容仍然感觉像是在糖蜜中移动,这可能是令人讨厌的kernel_task导致高…