【VBA基础】变量的类型和申明变量类型的重要性
yuyutoo 2025-01-05 00:09 3 浏览 0 评论
各位朋友,你们好,今天和你们聊点VBA基础知识:VBA变量。
注:
此文字数约3500字,主要是讲解VBA变量知识,通过一些动图展示变量上的效果;
如果你是初学者,建议先收藏此文,看看最后给初学者的建议那一部分;
如果你是有一定的基础,想详细了解VBA的变量,提升代码运行效率,可以详细看看。
目录如下:
一、变量的概念
二、变量的命名
三、变量的申明
四、变量的类型
五、变量的作用域
六、变量的赋值
七、变量的存活期
八、正确申明变量类型对运行时间的影响
九、给初学者的建议
一、变量的概念
变量是用于保存程序运行过程中的临时值。和常量不同的是,变量是一个指定的内存位置,用于保存代码执行过程中可以更改的值。
变量有两种:动态变量和静态变量
静态变量和动态变量的区别:
动态变量:过程每运行一遍,动态变量的值会重置;
静态变量:过程每运行一遍,静态变量的值还是上一次过程运行的结果。
我们用动态图片来展示动态变量和静态变量:
二、变量的命名
在VBA中,可以使用名称来表示内存的位置,这个名称就是标识符,可以理解为变量的名字。
变量命名的注意事项:
1、第一个字符必须使用英文字母或中文字符(中文版EXCEL支持中文字符);
2、名称长度不超过255个字符;
3、名称不能与VBA本身的Function过程、语句、即方法的名称相同,避免冲突;
4、不能在同一范围的相同层级中使用重复的名称。
三、变量的申明
在使用变量时,需要告诉VBA程序,变量的名称和数据类型,即声明变量。
通常用Dim语句来声明动态变量,用Static语句来声明静态变量。
声明数据类型后,可以在计算机内建立一个指定的存储位置,这样在运行代码时程序就会很快,内存利用效率很高,否则,计算机还要耗用很大的内存来判断其数值类型,运行会比较慢。
1、申明变量的写法
声明变量通常都是在程序开始处,可以在同一行声明多个变量,用英文逗号间隔即可。写法如下:
Dim 变量1 As 变量类型,变量2 As 变量类型,……
Static 变量1 As 变量类型,变量2 As 变量类型,……
2、强制申明变量
要强制申明变量,直接在输入代码时最顶头输入【Option Explicit】,就可以,我们看下图的效果:
演示过程解析:
① 未设置强制申明变量,在未申明变量的状态下,代码可以正常执行;
② 设置了强制申明变量,在未申明变量的状态下,无法执行代码,提醒变量未定义;
③ 设置了强制申明变量,在申明了变量的状态下,代码执行通过。
扩展:如果不会写【Option Explicit】,是否有快捷方法实现强制申明变量呢?当然有,请看下面动图
VBE编辑器菜单的工具→选项→编辑器→勾选要求变量申明。确定后,每次插入模块,都会在模块前面增加【Option Explicit】
四、变量的类型
VBA中的变量类型及相关参数,详见上表,我们在申明变量时,要选择合适的变量类型。
比如变量的值为整数,就把变量申明为Integer型;
如果变量的值是大于32767的整数,就要把变量申明为Long型;
如果变量是时间,就要把变量申明为Date型(在工作表中,时间是数值的一种;但是在VBA中,要根据情况明确;申明数值时,还要根据数值的形式、范围选择合适的数值类型)
注意:
1、Variant型(变体型)可以存放任何类型的数据,当指定为变体型时,不必在数据类型间转换,VBA会自动转换;
2、在程序中不特别说明时,均默认为变体型;
3、由于变体型存放空间大,因此不在特殊情况下不适用该类型。
五、变量的作用域
作用域就是变量使用范围,VBA中有三种级别的作用域:过程级变量、模块级变量和全局级级变量。
1、过程级变量:过程级变量只在变量所在的过程中有效。
Sub Test()
Dim a As Integer
Debug.Print a + 1
End Sub
如上面这个Test过程,这里申明的变量a,就只能用于此过程中。
2、模块级变量:在同一个模块内通用的变量。
与过程级变量声明的不同方式在于,写过程前先声明变量,模块级代码的申明方式如下:
方法①:Dim 变量 As变量类型
方法②:Private 变量 As 变量类型
演示效果如下:
演示过程解析(强制申明变量状态下演示):
① 在模块1中申明了变量a,在模块1中运行通过;
② 切换到模块2,Test2过程中有一个未申明的变量a,直接运行,提示变量未申请;
③ 用Private申明了变量b,然后将模块1和模块2过程中的变量都修改为b,在模块2中运行通过,在模块1中运行错误。
④通过演示得出结论,这两种申明变量的方式生成的都是模块级变量,只能在当前模块中使用,跨模块使用无效。
3、全局级变量:在该工程内通用的变量。
全局变量与过程级变量声明的方式相同,都是写过程前先声明变量,全局变量的申明方式如下:
Public 变量 As 变量类型
演示效果如下:
演示过程解析(强制申明变量状态下演示):
① 在模块1中申明了全局变量a,在模块2中申明了全局变量b;
② 模块1种Test过程中有变量a和b,运行通过;
③ 模块2种Test2过程中有变量a和b,运行通过;
注意:
① 对于不同级的变量使用的原则,尽量使用过程级变量;
② 如果不同过程之间有共享值时,才使用全局级变量;
③ 要控制全局级变量的使用数量。
六、变量的赋值
1、给文本、数值、日期等数据类型变量赋值
语句为: Let 变量名称 = 变量值(这里的Let可以省略,即:变量名称=变量值)
例如:
Sub 变量赋值()
Dim str As String
Let str = "我是上班下班"
End sub
2、给对象变量(Object型,例如单元格)赋值
语句为:Set 变量名称=对象(这里Set千万不能少。)
例如:
SUB 变量赋值()
Dim rng = Range
Set rng = Worksheets("sheet1").Range("A1")
rng.Value= "我是上班下班"
End sub
七、变量的存活期
变量的存活期就是指变量在内存中保留的时间,这个与变量的作用域有很大的关系。
1、过程级变量:
出现:当SUB过程开始执行时,过程级代码才储存到内存中;
结束:SUB过程执行完成时,变量占用的内存就会立即释放。
2、模块级变量:
出现:当程序开始运行时,模块级代码就储存到内存中;
结束:当关闭工作薄时,变量占用的内存才会释放。
3、全局级变量:
出现:当程序开始运行时,全局级代码就储存到内存中;
结束:当关闭工作薄时,变量占用的内存才会释放。
4、静态变量:
出现:当程序开始运行时,全局级代码就储存到内存中;
结束:当关闭工作薄时,变量占用的内存才会释放。
八、正确申明变量类型对运行时间的影响
我们直接来看一张动图
动图解析:
1、当不申明变量类型时,运行完成需要9.17秒;
2、当正确申明变量类型时,运行完成需要5..61秒;
3、如果换成更大量的数据、更复杂的运算,运行时间上的差距还会更大;
4、所以大家可以看到正确申明变量的总要性。
九、给初学者的建议
1、学习VBA是否一定要先学习变量?
①初学者不必马上去学习定义变量的各种知识,直接写代码照样可以入门;
②入门以后再学习定义变量的方法,并根据自己的认识取舍即可;
2、是否必须在程序开头加上Option Explicit?
在电脑286、386时代,在DOS程序代码时代,在内存仅16M,32M时代,你必须定义好每一个变量的数据类型,以便最高效地进行内存使用。即,一个口袋里只有10元钱的人,要生活一周,于是你必须精打细算好每一分钱,否则就会饿死。
Option Explicit 的作用,就在于:如果你的程序没有做到精确定义每一个变量的数据类型,编译程序就会拒绝执行,它认为你太奢侈了,不懂得节约使用每一分钱。
而现在的电脑硬件环境,已经是过去的几千倍了。每一个人口袋里都有几百万的钱,还有必要去考虑一分钱、一元钱的用法么?
3、是否需要dim 所有变量?
好处:不同的数据类型,占用大小不同的字节,因此计算时对内存的占用和运算效率有所不同。因此,定义变量数据类型以后,可能的好处是少占用一些内存以及大量重复运算是提高计算速度。
坏处:由于各种类型占用字节的限制,它所能代表的数值范围受到了限制!如果初学者试图去使用定义变量类型的方法时,往往尚未得到实际好处,即【运算速度提高】的好处(但实际运算量小时速度的差别很小、很小可以完全忽略不计)却首先受到了因为不能恰如其份地定义好变量类型,而造成了变量溢出或冲突导致代码无法运行的严重后果。
比如:如果你不了解Integer的范围,在超出变量范围的情况下使用就会提示出错。比如“溢出“
4、动态数组是否必须定义?
Dim arr、Dim txt、Dim Num全部无意义,因为:
Dim arr 等价于 Dim arr As Variant
Dim txt 等价于 Dim txt As Variant
Dim Num 等价于 Dim Num As Variant
5、学习VBA,完全可以先实战后深入,不必花费太多时间再如何声明好变量类型上,能事半功倍。抛开一些没必要的东西先让程序跑起来的确更重要。
我是上班下班,因为爱好办公软件、喜欢分享。所以来到这里将我的学习心得和踩过的一些坑,和大家聊聊,希望大家学习我成功的经验,避开我踩过的坑。我和你们一起进步。
好了,今天就聊到这里,感谢各位朋友的关注和支持。
如果你喜欢我分享的内容,请点个赞支持下;
如果你觉得我分享的内容对你有帮助,可以关注我;
如果要看我以前分享过的好玩的内容,大家可以去我的主页查看历史文章。
相关推荐
- 网站制作的流程是什么呢?简单大概的流程
-
关注我!了解更多网站建设的小干货~如今,随着网络时代的全面到来,网站在人们的生活和工作中发挥着极其重要的作用。网站制作的发展使更多的人加入了这个行业。如果你想掌握网站制作的知识,你可以在学校或网上学习...
- 一款谷歌(Google)打造的广告网页设计制作软件
-
GoogleWebDesigner是由谷歌(Google)打造的一款广告网页设计制作软件,它能够帮助从事于广告网页设计工作或是有这方面需求的用户更加有效快速的进行完成相关的行业设计工作,软件可以支...
- 普通网站如何制作一个网站?
-
对行外人来讲,在预备做一个网站项目时,最想了解的无非就是网站制作的悉数流程。网站制作是要有计划的,事先策划好才能更快更好的完成。网站的几个基本组成元素:域名+空间+程序+模板+维护经验+日常管理.网站...
- 用纯Python就能写一个漂亮的网页,再见HTML
-
再见HTML!用纯Python就能写一个漂亮的网页我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互:天啊,听听头都大呢!其实我就给老板做一个...
- HTML表单4(form的action、method属性)——零基础自学网页制作
-
表单的工作过程表单的信息发送与处理过程可以简单的进行图示,如下图。以注册会员为例,用户在自己的电脑上打开相应的注册表单页面填写信息,完成填写后点击提交按钮,也就是图中1所示过程。这时浏览器会将这些信息...
- 官网网站设计网页制作模板建站前端自适应响应式网站仿站门户
-
案例背景航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得目标的距离、方向和高度等具体信息,是无人机反制作战中的关键设备。航科慧联无人机搜索雷达能够在多种天气下检测到无人机的入侵、并获得...
- 软网推荐:在线制作软件图标
-
在制作PPT演示、软件、网页或其他程序时,我们往往需要用到一些个性化的图标。现在,即便是不安装任何软件,也可以上网在线制作自己需要的图标。首先访问如下制作网址:http://www.rw-design...
- 自定义跳转的h5网页如何制作?
-
文章来源:墨鹊微站...
- 网页如何制作?这几点要知道
-
这是一个个性张扬的时代,也是一个动手能力和动脑能力都比较强的时代,因此很多人对于能够自己动手完成的东西,都不太想假手于人。于是网页制作成了各大搜索引擎里面排名比较靠前的关键词之一。想要知道网页如何制作...
- 手机端网站简单制作教程,怎么快速制作一个移动端的网站
-
想要创建一个手机端的网站,需要有域名、已经完成网站页面的开发设计,零基础朋友不懂代码技术,直接在线套用乔拓云里面的网站模板来开发是比较简单可行的,进入乔拓云网,复制网站模板编辑网站的内容,注册域名后绑...
- 几张动图教你轻松了解Dreamweaver做网页
-
施老师:当今可是互联网时代,人们的生活、社交离不开互联网,那么不管你是网页设计师,还是销售达人,还是个体户,总必不可少的要在网上呈现一些页面给客户看,这个就是让你做网页,而Dreamweaver是做网...
- 用Deepseek制作网页版的汉诺塔游戏保姆级教程
-
在deepseek中输入:“帮我做一个网页版的汉诺塔演示游戏,游戏包含2层、3层、4层、5层的汉诺塔游戏演示,制作自动求解演示按钮,点击按钮就可以生成出步数,同时自动演示最优解动画。”...
- JS制作网页版计算器
-
大家晚上好,我是洁哥,抱歉今天有点晚了,但是洁哥不会缺席哦,今天我们来看一个JS实现网页版计算器的例题,先来看一看出来的效果吧(123+123=246)(123-123=0)(123*123=1512...
- 网页制作流程哪几步
-
在数字化时代,网页制作成为企业和个人展示形象、传递信息的重要方式。但是,许多人对于网页制作的流程仍感到困扰。为了解决这一问题,我们将深入探讨网页制作的关键步骤,助您更好地理解和应用这一过程。第一步:需...
- 这4个设计技巧,教你做好个人网页制作
-
随着互联网发展,个人建站已经不是什么稀奇事,学生、求职者、插画师、摄影师、作家……都可以制作个人网站,用来展示自身形象,或者吸引粉丝。那么如何做好个人网站呢?在不懂设计和技术知识的情况下,个人网页制作...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)