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中使用正则表达式的方法及代码,另 ...
随机推荐
- Javascript常用字符串判断函数
[代码] 字符串,函数,Javascript,脚本100 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- Core Graphics框架 利用Quartz 2D绘图
首先,什么是Core Graphics和Quartz 2D? Core Graphics:是基于Quartz 2D绘图引擎的一个C语言的API绘图框架.它也是iOS开发中最基本的框架(Framewor ...
- 使用 chrome 扩展 Vimium 实现快捷键关闭其他标签页
Vimium 是一款很强大的键盘操作扩展,几乎所有的操作都可以使用键盘命令完成,还支持自定义按键. 其实 Vimium 很早就支持了关闭其他标签页这个操作,甚至还能关闭左侧标签页和关闭右侧标签页,只是 ...
- Unity 声音播放不受Time.scale为0的影响
其他会暂停,目前发现声音不受影响 嗯,就这样.
- 【fiddler】 fiddler总是在菜单栏下面弹出提示“The system proxy was changed,click to reenable fiddler capture”--转
源地址:http://blog.csdn.net/htdeyanlei/article/details/52873060 标签: fiddler 2016-10-20 15:28 2747人阅读 评论 ...
- java容器基础
总结一下学过的java容器知识. 一.java容器框架 由于之前学习的java容器类比较混乱,先简单的整理一下java集合框架. 首先,像这种图,网上到处都是,因为这个也算比较准确吧,我也懒得自己画了 ...
- 工作流Activiti学习地址
http://blog.csdn.net/xnf1991/article/details/52610277
- laravel save() 返回 null
原因:引用其他方法时,没有 return save()的操作结果. 在使用save()方法时,发现返回值是:null:
- Vue.mixin Vue.extend(Vue.component)的原理与区别
1.本文将讲述 方法 Vue.extend Vue.mixin 与 new Vue({mixins:[], extend:{}})的区别与原理 先回顾一下 Vue.mixin 官网如下描述: Vue. ...
- HDU 2604 Queuing( 递推关系 + 矩阵快速幂 )
链接:传送门 题意:一个队列是由字母 f 和 m 组成的,队列长度为 L,那么这个队列的排列数为 2^L 现在定义一个E-queue,即队列排列中是不含有 fmf or fff ,然后问长度为L的E- ...