VBA语言中的变量是否需要事先定义数据类

首先欢迎众多的朋友来我这个平台,或是学习,或者提出问题,我都欢迎。为了更好的和大家交流,分享知识,我会不定期的集合朋友提出的各种问题,选择其中有代表性的做一期专题,给大家以解答。所以,以后大家问题尽管提,很可能下期就有你提出的问题解答了。当然,由于篇幅有限,不可能面面俱到,没有照顾到的朋友还请谅解。

这期专题共解答有三个问题:

问题一:如果程序中所有变量,都不事先定义,有什么不好?(VBA)

问题二:公司如何从中选拔出年龄小于或者等于30岁,或者业绩大于或者等于万的人员(EXCEL函数)

问题三:A列姓名,B列日期,C列当月工资,求所有人分年度工资(-年)

下面逐一解答:

问题一:如果程序中所有变量,都不事先定义,有什么不好?(VBA)

对于这个问题,我先要解释4个概念:动态语言、静态语言;动态类型语言、静态类型语言,这几个概念对于初接触程序语言的朋友来说,很是费解。下面看我的介绍:

1、动态语言

是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时,代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

2、静态语言

与动态语言相对对应,运行时结构不可变的语言就是静态语言。如Java、C、C++。

3、动态类型语言(DynamicallyTypedLanguage)

动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

4、静态类型语言(StaticallyTypedLanguage)

静态语言的数据类型是在编译期间(或运行)之前确定的,编写代码的时候要明确确定变量的数据类型。主要语言:C、C++、C#、Java、Object-C。

由上面的讲解可以知道,动态类型语言和动态语言是完全不同的两个概念。动态类型语言,是指在运行期间才去做数据类型检查的语言,说的是数据类型;动态语言,说的是运行是改变结构,是代码结构。

静态类型语言的优缺点:

优点:其结构非常规范,便于调试,方便类型安全;

缺点:为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。

动态类型语言的优缺点:

有点:在于方便阅读,不需要写非常多的类型相关的代码;

缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。

很显然VBA是属于静态语言的范畴,其变量时需要定义的,但他的语言类型中有个类型是变体型数据,符号Variant,变体型数据是一种特殊的数据类型,几乎可以用于保存所有其它数据类型的数据。可以简单地理解为:当不知道变量所要表示的数据是什么类型时,就把它定义为Variant。对于数字,此类型数据占位16字节,可以存储DOUBLE范围内任何值;对于文本占位22字节。

那么是不是我们在写程序的时候可以不事先定义就可以呢?或者直接全部定义成Variant就可以呢?

首先,在上述的分析中知道,VB是静态类型语言的范畴,变量理应事先定义。

其次如果在使用过程中没有事先定义数据类型,变量将定义为Variant类型,而此类型占用的空间较大(16或22字节),这将影响程序的性能。如:整型Integer,占用两个字节;长整型Long,占用4个字节;单精度浮点型Single,占用4个字节;双精度浮点型Double,占用8个字节.要远比Variant类型的数据占用的内存少。

第三,对于数组,必须要定义范围数组界标的范围,否则程序会报错。

第四,事先声明变量的好处:、

1可以加速过程的执行。因为VB知道了数据的类型,就会根据数据类型来安排存储所需要的内存。

2可以使你的代码可理解性增加,因为每个变量都列在了过程的前面。

3可以预防由于变量拼写错误而导致的错误。VB会根据声明变量的拼写来自动更正变量的名称

4如果VB不知道你的数据类型,那么分配给变量的是Variant数据类型,占用的内存会增加,影响程序的运行速度。

问题二:公司想从中选拔出年龄小于或者等于30岁,或者业绩大于或者等于万的人员(EXCEL函数)

这个问题不做过多的讲解,请参考下面的截图公式,常看我文章的朋友很容易会理解:

问题三:A列姓名,B列日期,C列当月工资,求所有人分年度工资(-年)

此问题没有清楚的表达要解决的问题的条件,暂不做解答。请读者朋友提问时要写清自己的问题。

好了,三个问题回答完毕。

今日内容回向:

1,什么是静态类型语言,什么是动态类型语言。

2,静态语言和静态类型语言是否一样?

3VBA属于哪类语言的范畴?

4在写VBA程序时是否可以事先不定义数据类型




转载请注明:http://www.aierlanlan.com/rzdk/2878.html