VBA Excel 中的变量和数据类型
在计算机系统中,几乎每个程序都使用变量和数据类型来存储和表示数据。同样,Excel VBA 也有变量和数据类型来存储和表示数据及其类型。在本文中,我们将了解 VBA 变量、它们的范围、数据类型等等。
VBA 变量
VBA(Visual Basic for Application)变量类似于其他编程语言变量,它们充当用于存储数据(整数、字符串、浮点数等)的容器。我们可以在多个地方使用代码中的变量并执行程序。
在 VBA 中定义变量
VBA 允许以两种方式定义变量:
- 隐式——在 VBA 中,我们可以使用 assignment(=)运算符隐式声明变量。在 VBA 中隐式声明的所有变量都是“ Variant ”类型。变体类型变量比普通变量需要更多的内存空间。示例:标签=“gfg”
- 显式地——显式地,我们可以使用“ Dim ”关键字来声明变量。显式变量还减少了命名冲突和拼写错误。示例: Num 作为密码
VBA 变量的语法
// macro definition
Sub VBA_Variable_Example ()
Dim
End Sub
VBA 变量规则:
- 其长度应小于 255 个字符。
- 字符之间不允许有空格。
- 它不应该以整数开头。
- 字符之间不允许使用句点(.)。
Allowed | Not Allowed |
gfg_article | gfg.article |
dataStructureCourse1 | 1CourseDataStructure |
geekforgeeks | geeks for geeks |
例子:
在这个例子中,我们将在 excel 中定义一个宏,我们将在该宏中输入代码并执行代码以了解 VBA 变量在 excel 中的工作。
第 1 步:首先,我们将在 Excel 工具栏中提供开发人员选项。为此,请转到任何工具(在这里,我们选择绘图),然后右键单击它并选择“自定义功能区..”选项。
excel将打开弹出选项,我们需要检查开发人员复选框并单击确定。这将启用开发人员选项并使其在 Excel 顶部工具栏中可用。
第 2 步:在这一步中,我们将在 Visual Basic 编辑器中声明我们的变量。为此,请转到Developer > Visual Basic Editor 。
这将打开 Visual Basic 代码编辑器,我们需要在其中编写 VBA 脚本。
第 3 步:在这一步中,我们将编写 VBA 脚本。为此,我们将双击左侧窗格中 Microsoft excel 对象下的 ThisWorkbook,然后打开编辑器并向其中写入以下代码。
Sub VBA_Variable_GFG_Example()
Range(“a1”).Value = “Data Structure Course”
Range(“b1”).Value = “Data Structure Course”
Range(“c1”).Value = “Data Structure Course”
Var = “Data Structure Course”
Range(“a3”).Value = Var
Range(“b3”).Value = Var
Range(“c3”).Value = Var
End Sub
在上面,我们可以看到,如果不使用变量,我们要对字符串“ Data Structure Course ”进行更改并在每个字符串之前添加“ GeeksForGeeks ”,我们需要在三个不同的地方重复它。但是如果我们使用一个变量,那么我们只需要在我们声明变量的地方更改它。这将减少工作量。
Sub VBA_Variable_GFG_Example()
Range(“a1”).Value = “Data Structure Course”
Range(“b1”).Value = “Data Structure Course”
Range(“c1”).Value = “Data Structure Course”
Var = “GeeksForGeeks – Data Structure Course”
Range(“a3”).Value = Var
Range(“b3”).Value = Var
Range(“c3”).Value = Var
End Sub
我们将在 VBS 脚本编辑器中编写此代码并执行它。这将在代码中定义的单元格中打印输出字符串。
有一次,我们使用 Run 按钮执行它,我们将得到以下输出。
VBA 变量的范围
变量的范围是在我们声明变量时确定的。在 VBA 中,作用域告诉我们可以在哪里使用变量。变量的作用域分为三个级别:
1. 程序级别:这些是可以在它们定义的程序中使用的变量。过程是子或函数
示例:在此示例中,我们将看到 VBA 变量范围的过程级别。为此,打开 VBA 编辑器并将以下代码写入其中。
Sub sub1()
Dim res As String
res = “The variable which can be used within the procedure they are defined in.”
Range(“a1”).Value = res
End Sub
一次,我们单击 VBA 编辑器中的运行按钮,我们将输出。文本将打印到单元格 A1。
2、模块级:也称为私有模块级。它可以被同一模块中的任何过程使用。这些变量必须在模块顶部的所有过程之外声明。
示例:在此示例中,我们将查找变量的模块范围。为此,我们将创建一个新模块。我们将打开 VBA 编辑器,在左侧窗格(项目资源管理器)中,我们将右键单击并创建一个新模块,将以下代码添加到其中。
Dim txt As String
Sub ProcedureDemo()
txt = “A Sub or Function is a Procedure, variables defined inside them only accessible within them”
Range(“a1”).Value = txt
End Sub
Sub PrivateModuleDemo()
txt = “Variable which is define inside a module, are accessible by all the procedures within that module”
Range(“a2”).Value = txt
End Sub
在此之后,我们只需要单击“运行”按钮。此外,当我们运行它时,它会询问要运行哪些宏,我们需要选择“ Macros In:
一旦我们运行它,我们将在单元格 A1 和 A2 中获得输出。
3.公共模块级别:顾名思义,公共模块变量范围是在项目级别。如果我们将任何变量定义为公共模块变量,则它可以在该项目内的任何模块中使用。
示例:在此示例中,我们将添加两个不同的模块并在一个模块内定义一个公共 VBA 变量,并尝试从两个模块访问它。下面是 module1 和 module2 的代码。
模块1
Public res As String
Sub demo_1()
res = “geeks”
Range(“a1”).Value = res
End Sub
模块2
Sub demo_2()
res = “geeksforgeeks”
Range(“a2”).Value = res
End Sub
一次,完成两个模块。只需单击“运行”按钮。输出将打印在单元格 A1 和 A2 中,
变量的生命周期
变量可以在其范围内保留其值。变量的生命周期表明变量可以保留其值的时间。为了扩展范围等,变量的生命周期,我们需要用static关键字声明变量。如果我们使用 static 关键字声明变量,即使在所有宏执行完成后,变量仍将保留其值。
示例:在此示例中,我们将使用 static 关键字定义一个变量并多次执行它以检查它是否保留该值。我们需要将以下代码写入 VBA 编辑器。
Sub StaticVariableDemo()
Static count As Integer
count = count + 1
MsgBox (count)
End Sub
在此之后,我们需要执行它。每次我们单击运行按钮时,MessageBox 都会返回更新后的值。 (1, 2, 3…..),因此它将扩展其范围和生命周期。
VBA 数据类型
在计算机中,我们使用数据类型来区分整数和字符串等。我们将分配给变量的数据类型决定了应该存储在该变量中的内容,即需要存储在变量中的值是取决于变量的数据类型。在 VBA 中,数据类型分为两大类:
1、数值数据类型:数值数据类型用于进行加法、减法等数学运算,用于处理各种表示格式的数字。在数值数据类型中,整数类型仅表示整数(零、正数和负数)。非整数类型表示整数和小数部分。Data Types Memory Size Value Range Byte 1 2yte 0 to 255 Integer 2 bytes -32,768 to 32,767 Long 4 bytes -2,147,483,648 to 2,147,483,648 Single 4 bytes Negative Values (-3.402823E+38 to -1.401298E-45) & Positive Values (1.401298E-45 to 3.402823E+38) Double 8 bytes Negative Values (-1.79769313486232e+308 to -4.94065645841247E-324) & Positive Values (4.94065645841247E-324 to 1.79769313486232e+308) Currency 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807 Decimal 12 bytes No Decimal Places (+/- 79,228,162,514,264,337,593,543,950,335) & Up to 28 Decimal Places (+/- 7.9228162514264337593543950335)
2. 非数值数据类型:非数值数据类型不被算术运算运算符。它们由文本、数据等组成。Data Types Memory Size Value Range String(fixed size/length) Equivalent to String’s length(in bytes) 1 to 65,400 characters String(variable length) String’s length + 10 bytes 0 to 2 billion characters Boolean 2 bytes True/False Object 4 bytes Embedded object Data 8 bytes January 1, 100 to December 31, 9999 Variant(numeric) 16 bytes Any value Variant (text) Text’s length + 22 bytes 0 to 2 billion characters
注意:如果我们不声明任何数据类型,VBA 将默认将变量作为变体类型。
例子:
在这个例子中,我们将编写一个简单的脚本来创建一个按钮,单击该按钮会发生一个事件,我们将获得输出。
第 1 步:首先,我们将在我们的 Excel 工作表中插入一个命令按钮。为此,请转到Developer > Insert > Command Button并单击它。
之后,我们可以在我们想要的工作表中的任何位置插入按钮。我们只需要将它拖到 Excel 工作表上。
第 2 步:在这一步中,我们将为按钮编写脚本。为此,只需双击按钮。这将打开 VBA 脚本编辑器,我们将在其中编写以下代码。在下面的代码中,我们将 GFG 和 course 定义为 String 数据类型,将 res 定义为 Integer 数据类型。
Private Sub CommandButton1_Click()
Dim GFG As String, res As Integer, course As String
GFG = “GeeksForGeeks”
res = “01”
course = “Interview Preparation”
Range(“a1”).Value = GFG
Range(“b1”).Value = res
Range(“c1”).Value = course
End Sub
第 3 步:在这一步中,我们将保存我们的脚本。为此,单击 VBA 编辑器中的保存按钮。
excel 将弹出一个窗口,要求保存宏。我们需要单击“是”,它将保存它。
第 4 步:现在,我们将执行我们的脚本。为此,我们需要单击命令按钮。但在点击它之前,我们需要退出设计模式。要退出任何模式,只需单击一次模式。
完成此操作后,我们将通过单击commandButton1来执行脚本。它将给出以下输出。
注意:如果我们在excel的任何单元格中写“01”,它会默认打印“1”。这就是为什么在输出中,在单元格 b1 中只打印“1”。