VBA中类的解读及应用第二十五讲:把源数据赋给类利用类完成查找

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

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第二十五讲:把源数据赋给类,然后利用类完成查找的方案-4

【分享成果,随喜正能量】223 善良的人,总是有福。利己则生,利他则久。心存善良的帮助他人,不是一时兴起,而是要坚持不懈的从实际出发,看到他人所需,切实的帮助到他人。

第二十六讲 把源数据赋给类,然后利用类完成查找的方案-4

大家好,今日我们继续讲解利用类来进行查找的方案。在之前的第23到25讲中我们讲了建立一个类,这个类的功能是根据输入的内容定位要返回的内容,当我们把这个类的魂赋给某个对象后就可以实现查找了。

8 mydyg类的改进分析

在上面的三讲中利用的类是mydyg,在利用输入的单元格进行判断时,对于每次输入的值都要进行相同重复的数据读取:

那么有没有办法只进行一次数据的读取,然后在读取的数据中进行提取必要的值呢?如果这种方案能实现的话可以大大的提高程序的运行效率。我今日就来讲解这种一次读取数据的方案。当然,也是利用的类模块。这种方案需要用到动态数组了。

9 类MYNEWDYG的构建

我们先来看类模块的过程:我们首先建立一个类模块MYNEWDYG,下面是相应的代码:

Private rngsA

Private rngsB

Public TJ

Private A()

Property Get QSA()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsA = Mid(A(i), InStr(A(i), "#") + 1, InStr(A(i), "@") - InStr(A(i), "#") - 1)

Exit For

End If

Next

QSA = rngsA

End Property

Property Get QSB()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsB = Mid(A(i), InStr(A(i), "@") + 1, Len(A(i)) - InStr(A(i), "@"))

Exit For

End If

Next

QSB = rngsB

End Property

Property Set DYGB(rng As Range)

ReDim Preserve A(rng.Row)

A(rng.Row) = Cells(rng.Row, 1) & "#" & Cells(rng.Row, 2) & "@" & Cells(rng.Row, 3)

kk = 1

End Property

代码的截图:

10 类MYNEWDYG的代码分析

下面我们分析一下类模块的过程:这个过程中建立了类的属性有TJ,QSA,QSB,DYGB四个属性,这四个属性的作用各有不同。同时在类模块中还有两个数据的传递变量rngsA和rngsB,这两个变量是属性QSA和QSB的“宿主”(还是用这个词吧,比较好理解)。下面我们将就每个过程进行分析,

1) 对于传入数据的处理

Property Set DYGB(rng As Range)

ReDim Preserve A(rng.Row)

A(rng.Row) = Cells(rng.Row, 1) & "#" & Cells(rng.Row, 2) & "@" & Cells(rng.Row, 3)

kk = 1

End Property

当有数据(单元格)输入的时候,会将这个单元格及之后的几个数据提取分别以"#"和"@" 进行分隔,一共分成三个部分。

2) rngsA数据的获得

Property Get QSA()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsA = Mid(A(i), InStr(A(i), "#") + 1, InStr(A(i), "@") - InStr(A(i), "#") - 1)

Exit For

End If

Next

QSA = rngsA

End Property

提取rngsA数据时根据第一个字段的内容提取出相应的第二段的内容。

3) rngsB数据的获得

Property Get QSB()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsB = Mid(A(i), InStr(A(i), "@") + 1, Len(A(i)) - InStr(A(i), "@"))

Exit For

End If

Next

QSB = rngsB

End Property

提取rngsB数据时根据第一个字段的内容提取出相应的第三段的内容。

我们再来回顾一下上面类模块的作用,当输入数据时,会把这些数据首先放到一个数组中,当提取时可以根据某个字段的内容进行有选择的提取。

这就是类模块,实现了一个较为完整的过程。在下一讲我们会讲到如何利用这个类模块来完成我们的具体工作了。

到这里大家基本能了解类模块应用的思路了,要首先搭建一个类,相当于要建立一个虚无的魂,再在主程序中将这个魂赋给某个具体的对象,让这个对象去完成我们实际的工作,这或许是VBA中的机器人吧。

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

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



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

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

相关文章

Vue3核心语法进阶(Hook)

Vue3 自定义 Hook:让你的代码像乐高一样“可复用”!大家好,我是你们的前端小伙伴!上一篇我们聊了 Vue3 的生命周期,今天咱们继续深入 Vue3 的核心利器——自定义 Hook(Custom Hook)。如果你已经…

工控领域协议之Modbus

Modbus 是一种通信协议,用于工业自动化领域中的设备之间的通信。它是一种串行通信协议,广泛应用于连接不同设备、传感器和执行器的工业控制系统。 Modbus 在工业控制系统、自动化设备、能源管理系统等领域得到广泛应用。 Modbus 协议的基本特点&#xff…

大件垃圾识别 mAP↑28%:陌讯多模态融合算法实战解析

一、行业痛点:大件垃圾识别的现实困境在城市环卫智能化转型过程中,大件垃圾(如废旧家具、电器等)的自动化识别与分拣成为关键环节。据住建部《城市环境卫生发展报告》显示,传统人工分拣模式下大件垃圾识别准确率不足 6…

vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】

1.身份证校验【通用】/*** function isIDCard* description 判断是否为有效的身份证号码。* param {string} idCard - 待验证的身份证号码。* returns {boolean} 返回验证结果。*/ pubFun.isIDCard function (idCard) {// 身份证号码为15位或者18位,15位时全为数字…

如何给Word和WPS文档添加密码或取消密码

要保护Word和WPS文档,可以为它们加密,加密有两类:打开密码和修改密码。密码设置有两个入口,一个是在另存为,一个是在文件菜单。Word和WPS文字的路径略有不同,微软Office和WPS的其他套件也是如此操作。一、W…

uni-app项目gitignore文件示例

uni-app 忽略以下文件和目录 DS_Store 忽略 UniApp 编译生成的小程序相关目录 unpackage/ uni_modules/ 忽略编辑器自动生成的文件 idea/ vscode/ 忽略日志文件 logs/ 忽略临时文件 temp/ 忽略构建工具自动生成的文件 build/ 忽略 npm 安装的包文件 package-lock.json yarn.loc…

LeetCode 135:分糖果

LeetCode 135:分糖果问题本质与核心挑战 给定孩子的评分数组,需满足 “每个孩子至少1颗糖果,相邻评分高的孩子糖果更多”,求最少糖果总数。核心挑战: 相邻约束是双向的(左→右和右→左都需满足)…

【QT】安装与配置

个人主页:Guiat 归属专栏:QT 文章目录1. QT简介与准备工作1.1 什么是QT1.2 QT的版本选择1.3 系统要求检查2. QT安装方式详解2.1 官方在线安装器2.2 离线安装包2.3 包管理器安装3. Windows平台安装配置3.1 Windows安装步骤3.2 环境变量配置3.3 Visual Stu…

Java从入门到精通 - 算法、正则、异常

算法、正则、异常 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录算法、正则、异常1. 常见算法1.1 简单认识算法1.1.1 什么是算法?1.1.2 为什么要学习算法?1.2 排序算法1.2.1 冒泡排序1.2.1.1 实现冒泡排…

题单【排序】

P1271 【深基9.例1】选举学生会 P1271 【深基9.例1】选举学生会 - 洛谷 【方法一】快速排序 使用sort()&#xff0c;注意数组的范围&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std;int a[2000000],n,m;int main() {cin>>n>&g…

【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度

文章目录一、 AdaBoost&#xff1a;自适应提升算法1、AdaBoost数学原理详解1.1、 目标函数1.2、 样本权重更新的逻辑1.3、 模型权重计算的含义1.4、 AdaBoost的核心思想2、为什么AdaBoost如此有效&#xff1f;二、 随机梯度提升算法&#xff1a;梯度优化下更精细的优化1、随机梯…

力扣 hot100 Day65

75. 颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函…

12.Linux 磁盘管理

Linux : 磁盘管理 一、磁盘设备命名规则磁盘类型设备命名模式示例特点SATA/SCSI/SAS/dev/sdXsda&#xff08;第一块硬盘&#xff09; sda1&#xff08;第一块硬盘第一分区&#xff09;机械硬盘/通用接口NVMe/dev/nvmeXnYpZnvme0n1&#xff08;第一通道第一块盘&#xff09; …

《Linux服务与安全管理》| DHCP服务器安装和配置

《Linux服务与安全管理》| DHCP服务器安装和配置 目录 《Linux服务与安全管理》| DHCP服务器安装和配置 一、点击“编辑虚拟机设置”&#xff0c;配置三台虚拟机为“仅主机”模式。 二、server01开机&#xff0c;root用户登录&#xff0c;输入nmtui&#xff0c;进入图形界面…

赛博威携手Dify,助力AI在企业的场景化落地

人工智能正以前所未有的速度重塑商业世界。我们经历了从理论探索到大语言模型&#xff08;LLM&#xff09;的爆发式增长&#xff0c;如今&#xff0c;一个以“AI Agent&#xff08;智能体&#xff09;”为核心的新阶段已然来临。AI Agent代表了人工智能应用的未来形态。它不再被…

嵌入式硬件中三极管推挽电路控制与实现

我们昨天讲到了这个电路。 如果 A 电是 PWM 波,那么请问 B 点是不是 PWM 波呢?那么,当 PWM 为高时, B 点的电流是从哪里流过来的?

数据结构——查找(三、树形查找)

一、二叉排序树&#xff08;BST&#xff09;1、二叉排序树的定义构造一棵二叉排序树的目的并不是排序&#xff0c;而是提高查找、插入和删除关键字的速度二叉排序树&#xff08;也称二叉搜索树&#xff09;或者是一颗空树&#xff0c;或者是具有以下性质的二叉树1、若左子树非空…

八股——Kafka相关

文章目录1、 消息队列的作用什么&#xff1f;思&#xff1a;消息队列是什么?消息队列的定义消息队列的工作原理消息队列的作用消息队列的常见类型消息队列的简单例子2、Kafka 集群的架构是什么样子的&#xff1f;3、Kafka 消费者组和生产者组是什么&#xff1f;定义与核心作用…

墨者学院SQL手工注入漏洞测试(MySQL数据库)题目,纯手工注入教程

打开练习手工注入的靶场,发现此时为一个登录页面,我们先试着登录看看注入点在不在登录页面 使用用户:or 1=1# 密码:admin123;尝试登录,发现显示错误后直接弹回原页面,无sql报错相关语句,这里不存在sql注入点 一:判断注入点以及猜测是否有注入 此时点击这里的动态页面…

[硬件电路-140]:模拟电路 - 信号处理电路 - 锁定放大器概述、工作原理、常见芯片、管脚定义

一、锁定放大器概述锁定放大器&#xff08;Lock-in Amplifier&#xff09;是一种基于相干检测技术的高灵敏度测量仪器&#xff0c;通过将待测信号与参考信号进行同步处理&#xff0c;从强噪声中提取微弱信号并精确测量其振幅与相位。其核心优势包括&#xff1a;信噪比提升&…