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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】绘制春节烟花

一、Pygame库春节烟花示例 下面是一个使用Pygame实现的简单春节烟花效果的示例代码。请注意,运行下面的代码之前,请确保计算机上已经安装了Pygame库。 import pygame import random import math from pygame.locals import *# 初始化pygame pygame.ini…

6个好看的wordpress模板

简站wordpress服务业通用主题 2023年立秋纪念版,简站wordpress服务行业通用主题,适合服务行业企业官网使用。 https://www.jianzhanpress.com/?p5393 小语种翻译wordpress主题 小语种国家外贸网站建设需要的wordpress主题模板,适合做小语…

[BeginCTF]真龙之力

安装程序 双击安装 出现了安装失败的标签&#xff0c;开发者不允许测试。 查看Mainfest入口文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:versionCo…

【数据分享】1929-2023年全球站点的逐年平均降水量(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

详解计算机软件基本概念

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

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章&#xff0c;我们实现了通过GameplayEffect对Attribute值的修改&#xff0c;比如血量和蓝量&#xff0c;我们都是有一个最大血量和最大蓝量去限制它的最大值&#xff0c;而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的&#xff0c;接下来&#xff0c;我…

压敏电阻简介

压敏电阻 原理 压敏电阻器是一种具有瞬态电压抑制功能的元件&#xff0c;可以用来代替瞬态抑制二极管、齐纳二极管和电容器的组合。压敏电阻器可以对IC及其它设备的电路进行保护&#xff0c;防止因静电放电、浪涌及其它瞬态电流&#xff08;如雷击等&#xff09;而造成对它们…

中小型网络系统总体规划与设计方法

目录 1.基于网络的信息系统基本结构 2.网络需求调研与系统设计原则 3.网络用户调查 4.网络节点地理位置分布情况 5.网络需求详细分析 6.应用概要分析 7.网络工程设计总体目标与设计原则 8.网络结构与拓扑构型设计方法 9.核心层网络结构设计 10.接入核心路由器 11.汇聚…

音视频色彩:RGB/YUV

目录 1.RGB 1.1介绍 1.2分类 1.2.1RGB16 1)RGB565 2)RGB555 1.2.2RGB24 1.2.3RGB222 2.YUV 2.1介绍 2.2分类 2.2.1 YUV444 2.2.2 YUV 422 2.2.3 YUV 420 2.3存储格式 2.3.1 YUYV 2.3.2 UYVY 2.3.3 YUV 422P 2.3.4 YUV420P/YUV420SP 2.3.5 YU12 和…

C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析

1、MC协议帧 MC协议可以在串口通信&#xff0c;也可以在以太网通信&#xff0c;有A-1E和Qna-3E两种模式&#xff0c;这两种都是三菱PLC通信协议中比较常用的两种&#xff0c;一般我们使用比较多的是以太网通信&#xff0c;对于FX5U系列/Q系列/Qna系列/L系列的PLC&#xff0c;…

Wireshark不显示Thrift协议

使用Wireshark对thrift协议进行抓包&#xff0c;但是只显示了传输层的tcp协议&#xff1a; "右键" -> "Decode As" 选择thrift的tcp端口 将“当前”修改为Thrift&#xff0c;然后点击“确定” 设置后&#xff0c;可以发现Wireshark里面显示的协议从Tcp变…

tab 切换类交互功能实现

tab切换类交互&#xff1a; 记录激活项&#xff08;整个对象/id/index)动态类型控制 下面以一个地址 tab 切换业务功能为例&#xff1a; <div class"text item" :class"{active : activeAddress.id item.id}" click"switchAddress(item)"…