了解 Excel 宏中的变量和常量

在本文中,您将了解宏中的常量和变量是什么,它们可以在哪里使用,以及不同数据类型之间的主要区别是什么。 它还将揭示为什么需要常量,如果你可以只写一个变量而不改变它。

与其他编程语言一样,数据可以存储在变量或常量中(这两者通常也称为数据容器)。 这是这些概念之间的主要区别。 前者可能会根据程序中发生的情况而改变。 反过来,常量被设置一次并且不会改变它们的值。

如果您需要多次使用相同的大值,常量会很有用。 您可以简单地写下常量的名称,而不是复制数字。 例如,您可以使用常量“Pi”来存储 Pi,它是一个常量值。 它很大,每次都很难写,也很难搜索复制。 因此,写两个字符就足够了,环境会自动使用所需的数字。

Excel 用户如果需要不时更改其中存储的值,则需要声明变量。 例如,您可以设置一个名为 sVAT_Rate 的变量,它将存储产品的当前增值税率。 如果它发生变化,您可以快速更正它。 这对于在美国开展业务的人尤其有用,在美国,某些商品可能根本不需要缴纳增值税(而且这种税也因州而异)。

数据类型

每个数据容器可以是多种类型之一。 下表描述了处理信息的标准类型。 它们中有很多,而且初学者最初可能会认为它们相互重复。 但这是一种虚幻的感觉。 继续阅读以了解为什么指定正确的数据类型如此重要。

不建议为小数字使用占用更多内存空间的数据类型。 例如,对于数字 1,使用 Byte 类型就足够了。 这将对可执行模块的性能产生积极影响,尤其是在弱计算机上。 但重要的是不要在这里走得太远。 如果您使用的数据类型过于紧凑,则可能无法容纳过大的值。

声明常量和变量

强烈建议不要在没有事先声明的情况下使用数据容器。 然后可能会出现一些问题,为避免这些问题,有必要编写几行带有变量或常量枚举的代码。

要声明变量,使用 Dim 语句。 例如,像这样:

将变量名变暗为整数

Variable_Name 是变量的名称。 接下来,编写 As 运算符,指示数据类型。 您可以插入自己的名称和数据类型,而不是字符串“Variable_Name”和“Integer”。

也可以声明常量,但您必须首先指定它们的值。 选项之一是:

常量 iMaxCount = 5000

公平地说,在某些情况下您可以不声明变量,但在这种情况下,它们将自动被分配类型 Variant。 但是,不建议这样做,原因如下:

  1. 变量的处理速度要慢得多,如果有很多这样的变量,信息处理在弱计算机上会显着减慢。 似乎那几秒钟将决定? 但是,如果您必须编写大量代码,然后还要在性能较弱的计算机上运行它(考虑到现代办公套件需要大量 RAM,这些计算机仍在出售),您可以完全停止工作。 在某些情况下,错误地编写宏会导致具有少量 RAM 且并非旨在执行复杂任务的智能本冻结。 
  2. 名称中的打印错误是允许的,这可以通过使用 Option Explicit 语句来防止,该语句允许您找到未声明的变量(如果找到)。 这是一种检测错误的简单方法,因为最轻微的拼写错误都会导致解释器无法识别变量。 而且,如果您打开变量声明模式,如果发现未在模块一开始就声明的数据容器,解释器将根本不允许您运行宏。
  3. 避免变量值与数据类型不匹配导致的错误。 通常,将文本值分配给整数变量会引发错误。 是的,一方面,泛型类型是在没有声明的情况下分配的,但是如果提前声明它们,则可以避免随机错误。

因此,无论如何,强烈建议在 Excel 宏中声明所有变量。

在声明变量时,还要记住一件事。 声明变量时可以不为变量分配任何值,但在这种情况下,它会获取默认值。 例如:

  1. 行变为空。
  2. 数字取值为 0。
  3. 布尔类型的变量最初被认为是假的。
  4. 默认日期为 30 年 1899 月 XNUMX 日。

例如,如果之前没有指定值,则不需要将值 0 分配给整数变量。 她已经包含了这个号码。

选项显式声明

此语句允许您声明 VBA 代码中使用的所有变量,并在代码运行之前确定是否存在任何未声明的容器。 要使用此功能,只需在宏代码的最顶部编写一行 Option Explicit 代码。

如果您每次都需要在代码中包含此语句,您可以使用 VBA 编辑器中的特殊设置来实现。 要启用此选项,您必须:

  1. 沿着路径进入开发环境——工具>选项。
  2. 在此之后打开的窗口中,打开编辑器选项卡。
  3. 最后,选中 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 不是更容易吗?

结论

变量是宏编程的重要组成部分,它允许您执行复杂的操作,从计算到通知用户某些事件或在电子表格的单元格中指定特定值。

如果开发人员确定这些容器的内容将来不会改变,则应该使用常量。 建议不要改用变量,因为可能会不小心出错。

发表评论