在本文中,您将了解宏中的常量和变量是什么,它们可以在哪里使用,以及不同数据类型之间的主要区别是什么。 它还将揭示为什么需要常量,如果你可以只写一个变量而不改变它。
与其他编程语言一样,数据可以存储在变量或常量中(这两者通常也称为数据容器)。 这是这些概念之间的主要区别。 前者可能会根据程序中发生的情况而改变。 反过来,常量被设置一次并且不会改变它们的值。
如果您需要多次使用相同的大值,常量会很有用。 您可以简单地写下常量的名称,而不是复制数字。 例如,您可以使用常量“Pi”来存储 Pi,它是一个常量值。 它很大,每次都很难写,也很难搜索复制。 因此,写两个字符就足够了,环境会自动使用所需的数字。
Excel 用户如果需要不时更改其中存储的值,则需要声明变量。 例如,您可以设置一个名为 sVAT_Rate 的变量,它将存储产品的当前增值税率。 如果它发生变化,您可以快速更正它。 这对于在美国开展业务的人尤其有用,在美国,某些商品可能根本不需要缴纳增值税(而且这种税也因州而异)。
数据类型
每个数据容器可以是多种类型之一。 下表描述了处理信息的标准类型。 它们中有很多,而且初学者最初可能会认为它们相互重复。 但这是一种虚幻的感觉。 继续阅读以了解为什么指定正确的数据类型如此重要。
不建议为小数字使用占用更多内存空间的数据类型。 例如,对于数字 1,使用 Byte 类型就足够了。 这将对可执行模块的性能产生积极影响,尤其是在弱计算机上。 但重要的是不要在这里走得太远。 如果您使用的数据类型过于紧凑,则可能无法容纳过大的值。
声明常量和变量
强烈建议不要在没有事先声明的情况下使用数据容器。 然后可能会出现一些问题,为避免这些问题,有必要编写几行带有变量或常量枚举的代码。
要声明变量,使用 Dim 语句。 例如,像这样:
将变量名变暗为整数
Variable_Name 是变量的名称。 接下来,编写 As 运算符,指示数据类型。 您可以插入自己的名称和数据类型,而不是字符串“Variable_Name”和“Integer”。
也可以声明常量,但您必须首先指定它们的值。 选项之一是:
常量 iMaxCount = 5000
公平地说,在某些情况下您可以不声明变量,但在这种情况下,它们将自动被分配类型 Variant。 但是,不建议这样做,原因如下:
- 变量的处理速度要慢得多,如果有很多这样的变量,信息处理在弱计算机上会显着减慢。 似乎那几秒钟将决定? 但是,如果您必须编写大量代码,然后还要在性能较弱的计算机上运行它(考虑到现代办公套件需要大量 RAM,这些计算机仍在出售),您可以完全停止工作。 在某些情况下,错误地编写宏会导致具有少量 RAM 且并非旨在执行复杂任务的智能本冻结。
- 名称中的打印错误是允许的,这可以通过使用 Option Explicit 语句来防止,该语句允许您找到未声明的变量(如果找到)。 这是一种检测错误的简单方法,因为最轻微的拼写错误都会导致解释器无法识别变量。 而且,如果您打开变量声明模式,如果发现未在模块一开始就声明的数据容器,解释器将根本不允许您运行宏。
- 避免变量值与数据类型不匹配导致的错误。 通常,将文本值分配给整数变量会引发错误。 是的,一方面,泛型类型是在没有声明的情况下分配的,但是如果提前声明它们,则可以避免随机错误。
因此,无论如何,强烈建议在 Excel 宏中声明所有变量。
在声明变量时,还要记住一件事。 声明变量时可以不为变量分配任何值,但在这种情况下,它会获取默认值。 例如:
- 行变为空。
- 数字取值为 0。
- 布尔类型的变量最初被认为是假的。
- 默认日期为 30 年 1899 月 XNUMX 日。
例如,如果之前没有指定值,则不需要将值 0 分配给整数变量。 她已经包含了这个号码。
选项显式声明
此语句允许您声明 VBA 代码中使用的所有变量,并在代码运行之前确定是否存在任何未声明的容器。 要使用此功能,只需在宏代码的最顶部编写一行 Option Explicit 代码。
如果您每次都需要在代码中包含此语句,您可以使用 VBA 编辑器中的特殊设置来实现。 要启用此选项,您必须:
- 沿着路径进入开发环境——工具>选项。
- 在此之后打开的窗口中,打开编辑器选项卡。
- 最后,选中 Require Variable Declaration 项旁边的框。
完成这些步骤后,单击“确定”按钮。
就是这样,现在在编写每个新宏时,此行将自动插入代码顶部。
常量和变量的范围
每个变量或常量只有一个有限的范围。 这取决于你在哪里声明它。
假设我们有一个函数 总消耗(), 它使用变量 增值税税率. 根据模块中的位置,它将具有不同的范围:
选项显式 将 sVAT_Rate 调暗为单一 函数 Total_Cost() 作为 Double . . . 函数结束 | 如果在模块本身的顶部声明了一个变量,它将在整个模块中传播。 也就是说,它可以被每个过程读取。 此外,如果其中一个程序改变了变量的值,那么下一个程序也会读取这个更正后的值。 但是在其他模块中这个变量仍然不会被读取。 |
选项显式 函数 Total_Cost() 作为 Double 将 sVAT_Rate 调暗为单一 . . . 函数结束 | 在这种情况下,变量是在过程中声明的,如果在另一个过程中使用,解释器会抛出错误。 |
如果您希望变量被其他模块读取,您必须使用 Public 关键字而不是 Dim 关键字。 同样,您可以使用 Public 语句将变量的范围限制为仅当前模块,而不是 Dim 一词。
可以类似的方式设置常量的作用域,只不过这里的关键字是和Const运算符一起写的。
这是一个表格,其中有一个很好的示例,说明了它如何处理常量和变量。
选项显式 公共 sVAT_Rate 为单身 公共常量 iMax_Count = 5000 | 在此示例中,您可以看到如何使用 Public 关键字来声明变量,以及在 Visual Basic 编辑器中需要编写什么来声明公共常量。 这些值容器的范围适用于所有模块。 |
选项显式 私人 sVAT_Rate 为单身 私有常量 iMax_Count = 5000 | 在这里,变量和常量是使用 Private 关键字声明的。 这意味着它们只能在当前模块中看到,其他模块中的程序不能使用它们。 |
为什么需要常量和变量
常量和变量的使用可以增加代码的可理解程度。 如果初学者一般对为什么需要变量没有疑问,那么关于常量的需要就会有很多歧义。 乍一看,这个问题似乎很合乎逻辑。 毕竟,您可以声明一个变量,然后再也不更改它。
事实证明,对于占用大量内存空间的数据类型的使用,答案在同一平面上。 如果我们正在处理大量变量,我们可能会意外更改现有容器。 如果用户规定某个值永远不会改变,那么环境会自动控制这一点。
当宏由多个程序员编写时,这一点尤其重要。 人们可能知道某些变量不应该改变。 而另一个不是。 如果您指定 Const 运算符,其他开发人员将知道该值不会更改。
或者,如果有一个名称相同的常量,而该变量具有不同但相似的名称。 开发人员可以简单地混淆它们。 例如,一个不需要更改的变量称为Variable11,另一个可以编辑的变量称为Variable1。 一个人在编写代码时会自动跳过一个额外的单元而没有注意到它。 结果,值的容器将被更改,不应触摸。
或者开发人员自己可能会忘记哪些变量他可以触及,哪些他不能触及。 这种情况经常发生在代码写了几个星期,并且代码变大的时候。 在此期间,很容易忘记这个或那个变量的含义。
是的,您可以在这种情况下使用注释,但是指定单词 Const 不是更容易吗?
结论
变量是宏编程的重要组成部分,它允许您执行复杂的操作,从计算到通知用户某些事件或在电子表格的单元格中指定特定值。
如果开发人员确定这些容器的内容将来不会改变,则应该使用常量。 建议不要改用变量,因为可能会不小心出错。