VBA 中Dim含义
楼主是个初学者,在应用vba时遇到了dim方面的问题,查了很多资料后想把关于dim的这点儿知识简单整理出来
首先,从我遇到的问题作为切入点吧, (不得不承认我遇到的错误是很低级的)
具体的情境就不还原了,将问题抽象了出来,代码如下:
运行结果
可以看到integer1被初始化为了空值,integer2被初始化为0
楼主想当然的认为dim的同类型多变量声明方式为 dim 变量名1,变量名2 as type 这种形式,导致了错误
接下来,让我们先查看一下dim的语法
Dim [WithEvents]varname[([subscripts])] [As [New]type] [, [WithEvents]varname[([subscripts])] [As[New] type]] . . .
由此,正确的格式应为 Dim integer1 as Integer, integer2 as Integer
在我之前使用的方法中,integer1会被初始化为一个Variant类型的空值,可以随着对其的操作变成任意类型。integer2则会被正常的初始化为0.
在VBA中我们使用Dim语句进行变量的声明,像大部分编程语言一样,也分为局部与全局声明:在过程中使用即过程级别变量,模块顶部则为模块级别变量。
而Dim的使用方法,上面也提到过了,Dim[WithEvents] varname[([subscripts])] [As [New]type] [, [WithEvents]varname[([subscripts])] [As[New] type]] . . .
你可以在一行中声明多个类型的变量如: Dim string1 as String, integer1 as Integer, single1 as Single,但注意,若你如此 Dim integer1,integer2 as Integer,变量integer1只能会是Variant类型,即相当于Dim integer1 或者Dim integer1 as Variant。
在初始化值方面,Variant 变量被初始化为 Empty,具体类型的变量的各自独立进行初始化,例如String类型被初始化为"",Integer类型被初始化为0
最后提一句吧,网上看到有人说vba可以不声明变量,写出来就用即可。也确实是这样,在没有option explicit的情况下不会产生语法错误,但非常不建议这样做,Dim具体类型变量除了可以提高效率,还可以方便注释、让代码阅读起来更容易。所以还是建议尽可能使用dim声明变量,即便是一个Variant类型。
以下引用一位老师ZhouFfett的说法,证明声明与否在效率上的差别。
VBA 中Dim含义的更多相关文章
- VBA中四种自动运行的宏以及模块的含义
在Excel的“标准模块”中可以创建4种自动运行的宏,它们分别是Auto_Open(打开工作 簿时自动运行), Auto_Close, Auto_Activate, Auto_Deactivate. ...
- VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别
在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10") VB的语法,使用参数的不一定是方法,也有可能是属性 ...
- 在VBA中使用Windows API
VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...
- VBA中使用JavaScript脚本语言解析JSON数据
JSON:JavaScript 对象表示法(JavaScript Object Notation) 和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如: jsstr = {" ...
- VBA中操作XML
OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现. 先学习一下VBA中操作XML的方法 先引用Microsoft XML ...
- VBA中自定义类和事件的(伪)注册
想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法. 折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字.纯粹是瞎试,原理也还没有摸透.先留着,有时间再接着摸. 做以下尝试: ...
- VBA中find的一些使用方法
用excel处理数据的时候,无论是使用VBA还是函数,查找和引用都是两大主要的工作,VBA中的find系列的方法(find.findnext.Range.FindPrevious)返回range对象, ...
- 处理Selection对象和Range对象——Word VBA中重要的两个对象
处理Selection对象和Range对象——Word VBA中重要的两个对象 Word 开发人员参考Selection 对象代表窗口或窗格中的当前所选内容.所选内容代表文档中选定(或突出显示)的区域 ...
- 在VB6/VBA中使用正则表达式
一.关于起因 最近在Office的QQ群里问如何在一串字符串中提取数值并加总的问题.如果使用正则表达式可以非常迅速的解决这个问题. 那么今天我就探讨一下在VB6/VBA中使用正则表达式的方法及代码,另 ...
随机推荐
- windows下git server搭建
使用gitblit1.8搭建 首先要安装JDK 然后下载gitblit,这里给一个CSDN下载 https://download.csdn.net/download/nietzsche0/104826 ...
- 开源Android容器化框架Atlas开发者指南
Atlas是古希腊神话中的天神,是波士顿动力公司的机器人,借助搜索引擎,得以发现这个名词背后许许多多的含义.在手机淘宝,Atlas是一个扎根于Android客户端的一个组件化容器框架,相比神话中用手和 ...
- IOS - ImagePicker 连拍
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)sel ...
- 利用请求的JSON数据创建图形图层
先看效果图: 包含三个部分:信息窗口(标题是要素的某个属性信息,其余是感兴趣的属性信息).图上图形按照某一属性大小不一显示,图例 1.创建底图用于存放以上三部分: "esri/Map&quo ...
- HDU 1028 Ignatius and the Princess III(母函数整数拆分)
链接:传送门 题意:一个数n有多少种拆分方法 思路:典型母函数在整数拆分上的应用 /********************************************************** ...
- git pull 跟 fetch的区别
今天在公司碰到个问题,公司不使用master分支作为主分支,而使用release分支作为主分支,这就碰到了个问题,也就是当clone一个项目下来的时候,如果master跟release分支有冲突,就不 ...
- Codecademy网站安利 及 javaScript学习
今天发现一个Code教学网站,号称可以利用零碎时间来学习些代码. codecademy (https://www.codecademy.com)
- 如何在 Linux 上安装 Nginx (源码安装)
如何在 Linux( CentOS ) 上安装 Nginx 1.下载 nginx 链接 : https://pan.baidu.com/s/1sll0Hrf 密码 : xnem 2.安装 gcc ( ...
- jquery访问ashx文件示例
转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件 ...
- WinCE C#程序,控制启动时仅仅能启动一个程序,使用相互排斥量来实现,该实现方法測试通过
</pre><pre code_snippet_id="430174" snippet_file_name="blog_20140718_5_46349 ...