关于 vba 变量您需要了解的一切
变量VBA
在 VBA 中,变量就像一个存储盒,它本身存储在系统中,但它可以为您存储一个值,您可以在代码中使用该值,并根据需要更改该值(如其名称所示,“变量”) ” 是其值不固定的东西)。
要声明变量,您必须遵循一个简单的过程:
- 在开头使用关键字“Dim”。
- 指定变量的名称。
- 在名称后使用关键字“As”。
- 根据要分配给变量的值指定变量的“数据类型”。
这里我们使用名称“startDate”并指定数据类型“Date”。声明变量后,您可以为其赋值。
Dim startDate As Date startDate = “11/10/2018”
现在,每当您在代码中使用开始日期时,Excel 都会使用您提供的日期。
数据类型
在 VBA 中,数据类型基本上是在变量或常量中存储值时需要指定的数据类型。例如,如果要在变量中存储日期,则必须首先将该日期变量声明为其数据类型。
数据类型解释
以下是可在 VBA 中使用的数据类型的完整列表。
数据类型 | 使用的字节数 | 数值范围 |
---|---|---|
字节 | 1字节 | 0 至 255 |
布尔值 | 2字节 | 对或错 |
所有的 | 2字节 | -32.768 至 32.767 |
长整型(长整型) | 4字节 | -2,147,483,648 至 2,147,483,647 |
独自的 | 4字节 | -3.402823E38 至 -1.401298E-45(负值); 1.401298E-45 至 3.402823E38(正值) |
双倍的 | 8字节 | -1.79769313486231E308 至 -4.94065645841247E-324(负值);正值从 4.94065645841247E-324 到 1.79769313486232E308 |
现金 | 8字节 | -922,337,203,685,477.5808 至 922,337,203,685,477.5807 |
十进制 | 14字节 | +/-79 228 162 514 264 337 593 543 950 335 无小数点; +/-7.9228162514264337593543950335 小数点右侧有 28 位小数 |
日期 | 8字节 | 100年1月1日至9999年12月31日 |
目的 | 4字节 | 任何对象引用 |
链条(可变长度) | 10字节+字符串长度 | 0 至 20 亿左右 |
链条(定长) | 链条长度 | 1 至约 65,400 |
变体(带数字) | 16字节 | Double 范围内的任何数值 |
变体(带字符) | 22字节+字符串长度 | 与变长字符串相同的范围 |
用户自定义 | 各种各样的 | 每个元素的范围与其数据类型的范围相同 |
强烈建议在声明变量和常量的数据类型时这样做。
当您指定变量或常量的数据类型时,它可以确保数据的有效性并防止您输入无效的数据类型。如果省略数据类型,VBA 会将 Variant 数据类型应用于您的变量 – 这是最灵活的,VBA 不会猜测数据类型应该是什么。
提示:不跳过指定数据类型的最佳方法是在开始任何代码之前使用模块最顶部的显式选项。
显式或隐式
您可以显式或隐式声明变量。显式声明意味着在为变量赋值之前,先声明它并设置它的值。这样做的优点是当您定义它时,它的数据类型 VBA 始终以该格式存储数据。
这是一个例子:
Dim myDate As Date
因此,当您在此 VBA 中存储值时,它始终会应用日期格式。但是使用隐式声明,您就不必为这个显式声明语句而烦恼。相反,您设置变量的值并在代码语句中使用它。在隐式声明中,VBA 将数据存储在 Variant 变量类型中,因为您没有指定类型。
换句话说,如果您只是在代码中使用变量而不声明它,那么它就是隐式的。下面是隐式声明的示例:
myDate = “11/10/1990”
这就是您如何简单地将值分配给变量并在代码语句中使用它。如果你问我,我的意思是在使用变量之前先声明它总是更好。这不仅是一个很好的实践,而且还使您的代码运行得更快、更容易理解。
静态变量
好吧,我告诉过你变量是你可以改变值的地方,但这是不同的。对于普通变量,当过程完成时,存储在该变量中的值将从 VBA 内存中删除,但是,如果您不想丢失该值,可以将该变量设为静态。
要使变量静态以保留其值,只需使用“Static”关键字而不是使用“Dim”。
命名一个变量
您可以随意命名变量(这些规则也适用于常量和过程名称),但必须遵循一些规则:
- 您可以使用字母、数字和一些标点符号,但名称的第一个字符必须是字母。
- 空格或句点不是名称中使用的有效字符,但您可以使用下划线使名称可读。
- 名称中不能使用特殊字符。
- 名称的长度可以是 254 个字符,但使用的名称没有意义。
- 有许多保留字,这些字不能用于名称。如果您尝试使用这些词中的任何一个,您会收到一条错误消息。
- VBA 不区分情况。
范围
此时,您知道了这些过程以及哪个过程在哪种情况下有用,您还了解了变量以及如何定义它们的数据类型。
下一件重要的事情是了解范围,这意味着可用性。这就是它可以被使用的地方。定义变量时,作用域定义是否可以在其宿主过程之外使用它们。定义变量范围的方法有三种(常量范围和整个过程的范围)。
- 过程级别:只能在声明变量的同一过程中使用变量。
- 模块级(私有):使变量可以从模块中的所有过程访问。
- 模块级(公共):使变量可以从所有模块中的所有过程访问。
变量的默认作用域是声明该变量的过程(过程级)。
但让我与你分享一些来自现实世界的事情。
我在联合办公空间工作,我坐在三层楼的一楼。我几乎每天都坐在同一个座位上。因此,如果您声明具有过程级别作用域的变量,则只能在同一过程中使用它。就像我每天坐在同一层楼的同一个座位上一样。但让我告诉你更多:即使我坐在一楼,我也可以使用其他楼层的任何座位。在下面的快照中,我们在开始任何过程之前使用 Private 关键字在模块顶部声明了变量“myName”,并且我在所有三个代码中都使用了它。将此模块视为一座建筑物,其中有不同的楼层(过程),并且由于您已经在模块的开头声明了变量,因此您可以使用此模块中的任何过程。这称为私有模块级作用域。现在这是最后一件事:我的办公室在全国不同的城市都有分支机构,如果我去那里,我可以去那些办公室并使用任何我想要的座位。因此,如果工作簿中有不同的模块,则可以通过将变量声明为 Public 来在所有这些模块中使用一个变量。