热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

方法value作用于对象range时失败_什么是类,什么是对象

大家好,在我之前的教程中分别讲了VBA代码解决方案VBA数据库方案VBA字典和数组方案,通过对这三套教程的学习,我们对VBA的

大家好,在我之前的教程中分别讲了"VBA代码解决方案""VBA数据库方案""VBA字典和数组方案",通过对这三套教程的学习,我们对VBA的基本知识和基本的操作能有了一定的了解。这套教材是在前面教材基础上的讲解,希望大家在学习前面教材的基础上再学习本套教材。这套教程,我们开始讲解VBA的高级内容,类和类模块应用。今日的内容是第一讲:什么是类,什么是对象。

一什么是类? 类是对象的"灵魂"。对象可以是任何事物,而类不会做任何事情,也不会占用内存,只有当类成为对象并使用Set语句和New关键字实例化为具体对象后,才能做事情并占用内存。

把类实例化为具体对象的语法为:

Dim C As Class

Set C=New Class

上述语句创建了一个名为C的对象,该对象的数据类型为定义的类Class。其特点是:

1 使用New关键字,可以创建任意数量的类的新实例,并且能够将其存储在Collection对象中。

2 使用Property Let/Set/Get语句,可以编写代码验证赋给类元素的值,并且可以编写当值改变时执行的相应代码。例如,能够编写代码确保某个值为要求的特性。

3 类可以定义方法(使用Sub过程和Function过程),执行某项动作。

注意点:与用户自定义类型的区别,下面给出了自定义数据类型的特点:

1 在编译时必须声明所有的自定义类型变量。可以使用动态数组来处理多个自定义类型,但须使用Redim Preserve关键词。

2 不能在运行时添加新的自定义类型变量。

3 不能控制赋给自定义类型中元素的值。如只能定义为整数,但假如要求是大于5的值无法进行控制。

4 自定义类型只是静态地存储数据。

二 什么是类模块,类属性和方法:

类模块由属性和方法组成,类本身类似于名词;属性可以当作形容词,用来描述类;方法则为动词,执行操作

三 类和对象的比较

让我们先来看一条非常简单的程序,让我们亲身体会一下类的庐山真面目:

Sub mynzclass1_1()

Sheets("1").Activate

Range("A1").Value = "Hello,VBA world"

End Sub

上面代码的第二句:Range("A1").Value = "Hello,VBA world"

我们把这这句代码全部放开,把隐藏的补充完整,看看是什么样子:

Application.ActiveWorkbook.ActiveSheet.Range("A1")="Hello,VBA world"

我们解释一下:

1 Range("A1")为对象,指定单元格.

2 Range("A1")前面,ActiveSheet也是对象,指定了哪个工作表。

3 ActiveSheet前面又有一个对象ActiveWorkbook,指定了是哪个工作薄,

4 ActiveWorkbook前面还有一个Application,指定的是哪个应用。

那么其中的Value是什么?Value是一个Range("A1")这个对象的一个属性。那它是从哪来的呢?它是由Range类定义的。那么range是类还是对象呢?别急,我慢慢讲解,希望大家通过我的讲解能理解类和对象的关系。

在上面的讲解中,我们提到实例化类为具体对象的过程,其实在mynzclass_1引用了一个Range类,并将之实例化后修改了它的属性。而在例子中,我们只不过是将这一切都以隐藏起来,直接对一个对象Range("A1")修改它的属性,但Range("A1")这个对象正是引用了Ragne这个类,才具有了Range类的属性"Value"。

我们把上面的代码转换一下:

Sub mynzclass1_2 ()

Sheets("1").Activate

Dim RA As Range '引用一个Range类

Set RA = Range("A1") 'set将类实例化

RA.Value = "Hello,world" 'RA是一个对象了

Set RA = Nothing '将实例化销毁

End Sub

3575f79ab00139c46ade859ceed24209.png
750a4b156239834d9c9383090d734d2c.png
de3798174a903fa3bcd8ac54310bdc18.png

这段代码是上面mynzclass1_1的原始代码,从中我们看出类本身并不直接为我们做什么,但是,它却又一直默默地隐藏在幕后规化着我们的动作。是的,这就是类。它是通过对象的方式展现在我们的面前,让我们无时无刻与之交流,却又常常在不经意间忽视了它的存在。

现在再回到mynzclass1_1去看,就会很容易的发现,ActiveSheet实际引用了Worksheet类、ActiveWorkbook引用了Workbook类,而Application则引用了和它同名的Application类(这也正是我们会经常被混淆的一个概念,一个对象可以和被它所引用的类同名),原来我们在短短一个赋值的语句中,已经在与这么多的类打交道。

那我们又要怎样来区分类和对象呢?其实它们经常成对地出现在我们面前,只是一个是看得见摸得着的,一个却深藏不露。我们可以这样去理解类与对象:类是一个概念或是一种定义,每个类拥有其自己的特征和行为方式,而对象就是某个类的实例。所以类是对象的"灵魂",它无处不在,而你却看不到它。

比如:汽车

如果作为类:汽车的定义为有四个或者四个以上轮子,人能够坐在上面,操作它行走的工具(好难的定义)。这个时候"汽车类"是有自己的属性,如:汽车的前轮(是负责转向的)。汽车的前玻璃(是负责挡风的)等等。这里的"汽车"是一个概念抽象的概念。

而我们通常指的汽车是作为对象:如丰田汽车就是汽车类中的一个大对象,这个大对象中还有小的对象,如"威驰FS"对象,属性:轮子是某某牌子的,前挡风玻璃是某某牌子的。这些就是很具体的属性值了。

今日内容回向:

1 什么是类?

2 类和对象的联系是什么?

a3993dfa3d3c665e137586d1659b3e98.png



推荐阅读
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
author-avatar
手机用户2602882697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有