【VBA研究】VBA数据类型定义和管控

作者:iamlaosong

数据类型是对同一类数据的统称,如文本、日期、数值等。VBA里的数据类型有:字节型(Byte),整数型(Integer),长整数型(Long),单精度浮点型(Single),双精度浮点型(Double),货币型(Currency),小数型(Decimal),字符串型(文本型)(String),日期型(Date),布尔型(Boolean)。
VBA对数据类型定义的管控并不强,比如定义成整数型的变量同样可以赋值字符串,但是如果不注意,就会导致逻辑错误。

通过测试发现,如果一条语句定义多个变量,系统只对最后一个变量进行管控,比如下面的程序是不会报错的,也能实现其功能:

Sub tt()
    Dim ss, a, b, c, d As Integer
    a = 100
    b = 200
    c = a + b
    ss = "sum=" & c

    Cells(5, 1) = a
    Cells(5, 2) = b
    Cells(5, 3) = c
    Cells(5, 4) = ss

    a = 87654
    b = 12348
    c = a + b
    ss = "sum=" & c

    Cells(5, 5) = a
    Cells(5, 6) = b
    Cells(5, 7) = c
    Cells(5, 8) = ss

End Sub

执行结果是正常的:

100 200 300 sum=300 87654 12348 100002 sum=100002

不过,如果定义写成:Dim ss, a, b, c As Integer,则会报“溢出”错误。

同样,如果定义写成:Dim a, b, c, ss As Integer,则会报“类型不匹配”错误。也就是说,只对定义中最后一个变量进行管控。所以,如果要严格的进行变量类型管控,一次只能定义一个变量。

附:VBA中的数据类型


数据类型(名称)


大小(字节)


描述


Boolean


2


逻辑值True或False


Byte


1


0到255的整数


Integer


2


–32,768到32,767的整数


Long


4


–2,147,483,648到2,147,483,647的整数


Single


4


单精度浮点数值

负数:–3.402823E38到–1.401298E–45

正数:1.401298E–45到3.402823E38


Double


8


双精度浮点数值

负数:–1.79769313486231E308到–4.94065645841247E–324

正数:4.94065645841247E–324到1.79769313486231E308


Currency


8


(放大的整数(译者:整数除以10000得到的数值,参见VBA帮助))使用在定点计算中:

–922,337,203,685,477.5808到922,337,203,685,477.5807


Decimal


14


+/–79,228,162,514,264,337,593,543,950,335没有小数点;

+/–7.9228162514264337593543950335小数点后有28位数字;

最小的非0数字是

+/–0.0000000000000000000000000001


Date


8


从100年1月1日到9999年12月31日的日期


String(变长字符串)


10字节+字符串长度


变长字符串最多可包含大约 20 亿 ( 2^31)个字符。


String(定长字符串)


字符串长度


定长字符串最多可包含大约65,400 个字符。


Object


4


对象变量用来引用Excel中的任何对象


Variant(带数字)


16


最高范围到Double类型的任何数值


Variant(带字母)


22字节+字符串长度


和变长字符串的范围一样


用户定义类型

(使用Type)


成员所需的数值


每个成员的范围和它的数据类型的范围一致

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 03:48:26

【VBA研究】VBA数据类型定义和管控的相关文章

【VBA研究】变量定义的类型和实际赋值类型

作者:iamlaosong VBA中变量可以先定义后使用,也可以不定义直接使用.如果模块前面加了Option Explicit语句,则变量必须先定义后使用.不过,实验发现,VBA对变量类型没有进行严格的管控,不管哪种情况,定义的类型和实际使用中赋值类型并没有什么关系,也就是说定义为integer的变量同样赋值字符串,反之也然. 这样的结果往往会在程序中产生歧义,导致错误的运行结果.例如下面的语句: Dim  Scan(3000), BarCode As String ... BarCode =

【VBA研究】VBA产生不重复随机数

作者:iamlasong VBA编程实现不重复随机数输出.VBA里的随机函数是RND,在工作表中随机函数是RAND,一字之差,可要记好了.RND取值范围是[0,1),意思是0和1之间的一个随机数,包含0,但不包含1. 1.用法 语法:Rnd[(number)] 如果 number 的值是 Randomize 生成 小于 0 ,每次都使用 number 作为随机数种子得到的相同结果. 大于 0 ,以上一个随机数为种子产生下一个随机数. 等于 0 ,产生与最近生成的随机数相同的随机数. 省略, 以上

【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询

作者:iamlasong 1.接口说明 通过互联网訪问,运单跟踪信息查询接口基于HTTP协议开发,接口为RESTFul风格的Web Service,信息交互过程为用户按我方提供的web service地址进行调用,我方接到调用请求后,为用户返回JSON格式组织的数据信息.用户根据约定的接口规范对数据进行解析. 接口调用为HTTP请求的方式,每一次由用户发起的HTTP请求,须要设置验证信息,详细方法是,在HTTP Header部分添加version及authenticate属性,属性值在联调測试之

【VBA研究】VBA做了个简单的试题生成工具

作者:iamlasong 单位对新上岗的员工进行培训,培训结束后,需要进行考试,需要一个简单的考试系统,让新员工既可以自己练习,也可以进行测试,为此,我们做了一个题库,员工可以自己生成一套考题,测试自己的掌握程度,也可以集中起来进行考试,测试培训效果. 系统数据库很简单,主要有两个表,一个是题库,一个是成绩. create table EMSAPP_TEST_QUESTION ( type                  CHAR(1), id                    NUMBE

Keil MDK编译器的数据类型定义

1 #include "usart.h" 2 int main() 3 { 4 USART1_Config(); //串口初始化,以下信息通过串口打印 5 printf("char: %d\r\n",sizeof(char)); 6 printf("unsigned char: %d\r\n",sizeof(unsigned char)); 7 printf("short: %d\r\n",sizeof(short)); 8

AMF解析之数据类型定义 (转)

目录(?)[-] OpenRTMFPCumulus Primer15AMF解析之数据类型定义 数据类型 undefined Type null Type false type true type integer type double type String type XMLDocument type Date type Array type Object type XML type ByteArray Usages of AMF3 NetConnection and AMF 3 NetConn

[转]【VBA研究】VBA中日期和时间相关的计算

作者:iamlaosong http://blog.csdn.net/iamlaosong/article/details/18458253 VBA中取当前日期的函数是Date,当前时间的函数是Time,当前日期和时间一起取是Now.日期转换成年月日的函数分别是:Year.Month.Day,参数可以用Date或Now取出的值.时间转换成时分秒的函数分别是:Hour.Minute.Second,参数可以用Time或Now取出的值. 例如:   MsgBox "当前时间:" &

【VBA研究】工作表自己主动筛选模式检測

作者:iamlaosong 用VBA程序处理Excel数据文件.用户的数据文件有时处于自己主动筛选模式,往往导致数据处理不对.为此,须要检測工作表是否处于该模式,假设是,则去掉自己主动筛选.语句例如以下: If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter 这个语句一般仅仅用于去掉自己主动筛选,尽管Selection.AutoFilter也能够加上自己主动筛选,但筛选位置却可能在当前单元格处,所以要注意.加自己主动筛选前,

【VBA研究】用VBA取得EXCEL随意列有效行数

作者:iamlaosong 用VBA对Excel文件进行处理的时候,keyword段的列号编程时往往是不知道的.须要通过參数设定才干知道,因此.我们编程的时候,就不能用这种语句取有效行数: lineno = [B65536].End(xlUp).Row          '从下至上找有效行数 上述语句中的列名"B"假设是变量.能够用字符串连接的方式实现,即: pos_ems = "C" lineno = Range(pos_ems & "65536