Excel VBA 中的 10 个基本概念
在正式接触实际的 VBA 代码之前,对 Excel VBA 中的一些概念有初步的认识,将会有助于学好 Excel VBA。
要是细数 VBA 中的概念,估计用10篇文章都说不完。因此今天只介绍其中最基本的概念,这些概念将在以后的教程中反复出现,是学会 VBA 的必备基础。而其余的部分,会随着学习的深入,也会逐步做介绍。
Excel VBA 基本原理
说到 Excel VBA 的基本原理,自然的出现两种基本概念,一是 VBA 语法层面,一是 Excel 层面。那么这两者有什么区别,参考下面的图。
简单的总结一下上图:Excel 是一个对象,这个对象包含很多属性和子对象,而 VBA 是可以操作这些对象的工具,实现各种各样的效果。例如,Excel 包括 Range 对象,即单元格对象,使用 VBA 可以改变单元格对象的填充颜色属性。用代码表示如下。
'A1 单元格的填充颜色设置为颜色号为 49407 的颜色
Range("A1").Interior.Color = 49407
上面的代码现在不懂没关系,在这里使用代码简单的演示一下 Excel 中的对象和 VBA 的关系。
- Range(“A1”)、Interior、Color 等是 Excel 具备的对象和属性;
- 对象和属性的操作,是通过 VBA 语言实现的,即上面是一行 VBA 代码。中间的等号(=)是 VBA 语言的赋值符号,也是能改变单元格填充颜色的关键所在。
以上就是 Excel VBA 的基本原理。下面从 VBA 语言层面和 Excel 对象层面,分别介绍相关基本概念。
VBA 语言中基本概念
注释
注释是代码中不会被执行的一段代码。注释是几乎所有编程语言具备的功能,VBA 也不例外。
VBA 中的注释以英文单引号 (‘) 开头,后面接注释的内容。从单引号开始的部分不会被执行。
'我是一行注释
注释,正如字面意思,用来对代码进行解释。在写代码过程中,对代码进行注释是好的习惯,有助于自己或别人,更好的理解已经存在的一段代码。
关于注释的使用,在往后的教程中可以看到很多用法,可以进一步加深理解。
变量
变量是存储数据的一种表达方式。在程序开始,可以声明一个变量,指定变量的类型(数字、文本、逻辑值等),并给变量赋值。在程序其他地方,就可以用该变量,使其存储的值参与运算。
以下方代码为例,
'声明一个文本类型的变量
Dim s As String
'给 s 变量赋值,即 "Hello World"
s = "Hello World"
'在 A1 单元格写入 s 变量存储的数据
Range("A1").Value = s
可以看到,s 变量存储 “Hello World”文本,该文本在程序中就可以用s 变量表示。这部分内容在下一章「变量、类型和运算符」中详细介绍。
程序结构
程序结构表示程序的运行方式。VBA 正是因为存在多种代码结构,才能实现各类复杂的数据计算。常用的代码结构以下三种:
- 顺序结构
- 条件结构
- 循环结构
顺序结构,顾名思义,程序按照顺序执行。在 VBA 中就是从上到下,一行一行地执行。
条件结构,代码中的指定部分,按照某个条件,选择性地执行。即,条件为真时,执行指定代码;否则跳过该部分代码,不执行。
循环结构,代码中的指定部分,按指定次数,循环执行。这是为什么 VBA 的效率高的一个原因,因为它能将相同的操作,自动按任意数量重复执行。
关于程序结构的内容,在「程序结构」一章中详细介绍。
过程和函数
过程或函数包含多行代码,是组织代码的两种方式。一般情况下,一个过程或函数只包含实现一个功能的相关代码。如果一个过程或函数实现多个功能,建议将代码分成多个过程或函数。
过程和函数都可以执行一段代码,主要区别是,执行完代码后,函数能返回一个值,而过程不能返回。更多内容将在「过程和函数」章节介绍。
数组
数组表示一组同类型的数据的集合,是 VBA 中最重要的概念之一。以下面的代码为例:
'创建数组
Dim s(1 to 4) As String
'给数组的元素赋值
s(1) = "Excel"
s(2) = "Word"
s(3) = "PowerPoint"
s(4) = "Outlook"
上述代码创建了一个长度为4个、类型为文本的一个数组。对数组,使用编号给相应位置进行赋值。
在 VBA 的实际应用中,经常需要将单元格的数据转换为数组进行处理。更多内容在「数组」章节介绍。
对象
对象是一个物,它可以是一个事、一个物体、一个概念、一个名词。对象包含描述静态信息的属性和对对象可以操作的方法。
以生活中的对象为例子,汽车是一个对象。汽车的车牌号、油量、里程等是汽车的属性;开车、加油、换车牌等是汽车的方法。
在 VBA 中也是类似。工作表(Worksheet)是一个对象,它具有名称、标签颜色等属性,有添加、删除等方法。Excel VBA 中对象将在「Excel VBA 对象模型」一章中详细介绍。
Excel VBA 中的基本概念
Excel 对象模型
在上面对象一段中,说到了工作表(Worksheet)对象。其实 Excel 本身是就是一个对象,是 Excel 中的最大的对象,使用 Application 表示。Application 对象又包含工作簿(Workbook)对象,工作簿(Workbook)对象又包含工作表(Worksheet)对象,而工作表(Worksheet)对象又包含其他的子对象。
上面一段基本描述了 Excel VBA 对象模型,即是一种树状结构,多个对象通过有逻辑的层次结构组织在一起。
更多内容在「Excel VBA 对象模型」一章中详细介绍。
常用 Excel 对象
- Application 对象,表示 Excel 应用程序。
- Workbook 对象,表示工作簿对象。
- Worksheet 对象,表示工作表对象
- Range 对象,表示单元格区域对象。
模块
模块是包含一个或多个过程或函数的内部组件。一个工作簿内包含的模块数量没有限制,一个模块内包含的过程或函数数量也没有限制。模块用来作为保存过程或函数的容器,这些过程和函数通常应用于整个工作簿。
通过把多个过程和函数,合理的放置在不同的模块,可以使整个 VBA 代码逻辑更清晰、更易于阅读和理解。
用户窗体
用户窗体是 VBA 代码与使用者交互的用户界面。Excel VBA 提供很多基本的窗体控件,可以制作复杂的用户界面。最典型的,Excel 中设置单元格格式的窗口界面,就是一个用户窗体。
最基本的窗体控件包括:
- 文本控件
- 按钮控件
- 列表控件
- 输入控件
关于窗体的更多内容,将在「用户窗体」一章详细介绍。
其他基本概念
VBA 编辑器
VBA 编辑器是 Excel 中写 VBA 代码的地方。编辑器中可以进行下列操作:
- 编写代码
- 修改已有的代码
- 插入新的模块,编辑模块中的代码
- 插入用户窗体,设计窗体界面
- 运行代码
- 调试代码
这部分内容将在「Excel VBA 编辑器」章节详细介绍。
以上就是今天要介绍的 Excel VBA 基本概念。在往后的教程中,它们会不断出现,加深你的理解。如有问题,欢迎在留言区评论讨论。
请问一下这个变量该怎么理解
就是用一个符号表示指定的数据。有可能是程序运行过程中变化的数据,有可能是复杂数据的别名。
例如,用π表示3.14……,这样程序中就不需要重复写那么长串数据了。
录制宏里面,对于合并的单元格,代码会出错,提示所有合并单元格大小需相同,请问代码要怎么修改
对于合并单元格,一般情况下读取没有问题,但是对其操作可能不成功。能否贴一下具体的代码和出错的行?
感恩分享,通俗易懂,容易上手,作者大大 还会继续更新嘛? 或是现在在哪个平台更新呢?
会更新的,在这里或者同名公众号,欢迎关注。
谢谢分享,前来学习
寫的很淺顯易懂
多谢分享,受教了!小白前来拜访
非常棒!
很好,谢谢。让我们这些小白不只是会用,还懂得了其基本原理
再次复习了基本概念,每次想学的时候都看基础。。。永远在基础上学习。。。
非常好!感谢!
非常感谢能够有这么好的学习平台
牛了溜溜了
真不错
感谢,非常详细,通俗易懂
解释得太通俗易懂了,谢谢
作者大神牛,感谢分享
打卡
非常好的分享
感谢,希望能看懂。
准备把基础资料看完再报课!
加油,遇到问题可以随时咨询
现在看不懂,但是真心想学,纯小白,感觉难度非常大,非常感谢博主分享。
也可以看一下我们的VBA平台的入门课程,系统、循序渐进,另外有一对一答疑。
课程在哪里看啊
请查看懒人VBA
极度舒适
Sub 初学()
Dim s(1 To 4) As String ‘给数组的元素赋值
s(1) = “Excel”
s(2) = “Word”
s(3) = “PowerPoint”
s(4) = “Outlook”
Range(“A1”).Value = s1
Range(“A2”).Value = s2
Range(“A3”).Value = s3
Range(“A4”).Value = s4
End Sub
数组那组怎么不成功呢,这样也不行?哪里有问题呢
你这个代码不会出现显示编译错误吗?声明和函数过程要分开些
这个没有要求必须分开写,而且大多时候都是写在过程或函数内的
数组元素获取语句写错了,序号需要写在括号里:s(序号)
点赞~
不懂
多谢大佬!
谢谢分享
大佬牛逼!!!
感谢分享,无数次放弃后,又来学习VBA了。
谢谢您的无私分享,思路真的太清晰了
感谢分享,感觉比较清晰,又不艰涩,继续学习!
感谢作者大大无私分享!好喜欢
val是函数呀,能声明作为变量使用吗
经实测是可以的,但是不建议这么用,感谢反馈,文中已修改。
爱了爱了
cells和range有什么区别?
range是实际的单元格引用区域。
cells是application、worksheet等对象的一个属性,这个属性返回range类型的区域。
你好,请问上面提到的数组章节在哪里可以看到?
数组部分还没发布,正在梳理编写
谢谢,第一天学习!
不客气 ,好好学
注释的字体颜色是不是能调整一下,配合黑底,不是很清晰。
感谢反馈,已换一种代码主题
感谢作者的无私奉献,作为新的初学者真的受教了!真诚感谢!
第一天学习,感谢作者无私分享!
敲优秀!👍
感谢!非常重要的概念和基础知识! Appreciate your contributions!
感谢分享,有很大帮助。
有个问题: VBA 编辑器中是否模块里面的过程和函数是应用在整个工作薄的? 那ThisWorkBook里面的过程和函数呢?还有某个sheet对应的过程和函数呢?就是他们的作用范围都是怎么样的?
很好的问题啊,10个月过去了,可否分享一下你的见解呢
这就要涉及到代码的作用域问题,关于这个会单独写一篇文章的
好的,期待
来学习
谢谢你的用心与无私的分享!让我们(至少是我)可以有一个方便与适合我的学习地方和科目。感恩!
语言很平实,可以理解到VBA的大体轮廓。
第一天学习打卡
VBA编辑器
VBA 编辑器“正”Excel 中写 VBA 代码的地方。
是有个错别字不?
已修改,感谢反馈。
高手就是高手