Excel VBA教程(六):Excel VBA语言基础-变量

在本文中,我们将了解 Excel VBA 语言基础知识中变量的内容。

这是上一篇文章的延续。

Excel VBA教程(五):Excel文件扩展名、VBE、字体设置

3. Excel VBA语言基础

3.1.多变的

检查变量声明和绑定方法。

3.1.1.变量声明

使用以下语法声明变量:

'변수 선언 문법
Dim <변수명> [As Type]

在 Visual Basic 中,您可以在不声明变量的情况下使用它,即使声明了它,您也可以不指定类型。

Dim t, x

如上,在声明t和x变量时不指定类型是没有问题的。

但是,为了减少错误或错误的可能性并使代码更易于阅读,建议遵守以下内容。

  • 必须声明和使用变量。 (推荐显式选项)
  • 还必须指定类型。
  • 将类型的缩写用作前缀的匈牙利表示法应用于变量名称,以便可以轻松识别类型。

'문자열 Title
Dim sTitle As String
  • 变量名、过程名、函数名等名称使用韩文完全没有问题,如果难以决定变量名或需要提高可读性,请积极使用韩文名称。

主要使用的类型和前缀如下。

字首类型长度参考
细绳10 + 字符串长度可表达约20亿个字符
整数2个字节阈值:-32,768 至 32,767
4字节限制:-2,147,483,648 至 2,147,483,647
b布尔值2个字节真假
o目的 工作簿、工作表、范围和集合等对象
Visual Basic 主要变量类型、前缀

使用上述前缀声明变量的示例如下。

Dim s단어 As String
Dim b단어발견 As Boolean
Dim oTargetBook As Workbook
Dim oTargetSht As Worksheet

3.1.2.变量早期绑定、后期绑定

在声明时确定变量类型的方法称为早期绑定,在执行时确定变量类型的方法称为后期绑定。下表总结了两种方法的概念、示例、建议、优缺点。

分配提前绑定后期绑定
概念如何在声明变量时指定类型
如果不是内置类型,则添加对该类型的引用并指定类型
如何在执行时指定类型
例子暗剑如弦
将 oRecordSet 变暗为 ADO.RecordSet
暗剑
Dim oRecordSet 作为对象
建议大多数情况下推荐仅在绝对必要时使用
(仅限对象类型)
优点写代码时自动补全,动态帮助支持(方便)
由于类型是在编译时确定的,因此有利于性能。
如果运行的计算机中没有引用库,则只有后期绑定的代码部分不执行。
坏处如果运行的电脑中没有引用库,则整体不会运行写代码时不支持自动补全(不方便)
性能相对较差,因为类型是在执行时确定并动态绑定的。
Variable Early binding, Late binding 比较

* 参考: https://docs.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients

让我们看一下每种方法的示例代码。这是一个简单的代码,用于使用 Outlook 创建电子邮件的收件人、主题和内容,并将其显示在屏幕上。

早期绑定对比后期绑定示例代码

早期绑定方式的示例代码如下。

Sub SendOLMail_EarlyBound()
    ​​​​​' declare variables for the Application and Mailitem objects
    ​​​​Dim oAPP                       As Outlook.Application
    ​​​​Dim oItem                      As Outlook.MailItem
     
    ​​​​​' instantiate the Application
    ​​​​Set oAPP = New Outlook.Application
     
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)
     
    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

变量oApp和oItem在声明时分别指定为Outlook.Application类型和Outlook.MailItem类型。在这种情况下,您需要添加对 Outlook 库的引用,如下所示。

필요한 type library 참조 추가
添加所需的类型库引用

打开“VBE > Tools > References”菜单,勾选“Available References”中的“Microsoft Outlook 16.0 Object Library”并单击OK按钮。

当您再次打开参考菜单时,它应该如下所示:

type library 참조 추가 확인
检查添加类型库引用

如果将保存此VBA代码的宏文件(.xlsm或.xlsb)复制到未安装Outlook 16的PC上运行,会出现找不到类型的错误。

后期绑定方法的示例代码如下。

Sub SendOLMail_LateBound()
    ​​​​​Dim oAPP                       As Object
    ​​​​​Dim oItem                      As Object
    ​​​​​' need to declare this constant as it has no meaning without
    ​​​​' the reference set to the Outlook library
    ​​​​Const olMailItem               As Long = 0

    ​​​​​' instantiate the Application - cannot use New without a reference
    ​​​​' so we must use CreateObject
    ​​​​Set oAPP = CreateObject("Outlook.Application")

    ​​​​'이후 코드는 동일
    ​​​​​' create a new email
    ​​​​Set oItem = oAPP.CreateItem(olMailItem)

    ​​​​​' set basic properties and display the email
    ​​​​With oItem
        ​​​​​​​​​.To = "foo@bar.com"
        ​​​​​​​​​.Subject = "this is a test"
        ​​​​​​​​​.Body = "nothing to see here"
        ​​​​​​​​​.Display
    ​​​​​End With
End Sub

oApp和oItem变量在声明时指定为Object类型,对象创建方式不同。

在第 10 行使用以下代码创建一个对象。

设置 oAPP = CreateObject(“Outlook.Application”)

有关 CreateObject 函数的详细说明,请参阅以下 URL。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/createobject-function

上面 URL 的一些摘录被留下了。


句法

创建对象(类,[ 服务器名 ])

这 创建对象 函数语法有以下部分:

部分描述
班级必需的; 变体 (细绳).要创建的对象的应用程序名称和类。
服务器名称选修的; 变体 (细绳).将在其中创建对象的网络服务器的名称。如果 servername 是一个空字符串(“”),则使用本地机器。

班上 争论 使用语法 appname.objecttype 并具有以下部分:

部分描述
应用名称必需的; 变体 (细绳).提供对象的应用程序的名称。
对象类型必需的; 变体 (细绳).类型或 班级 要创建的对象。

将保存了该VBA代码的宏文件(.xlsm或.xlsb)复制到未安装Outlook 16的PC上运行时,与Early binding一样,会出现找不到类型的错误。不同的是,在Early binding方法中,如果没有引用库,所有代码都不会从头开始执行,而在Late binding方法中,其他代码运行,只有包括CreateObject在内的代码(过程,函数)不执行。


到目前为止,我们已经了解了变量声明和绑定方法。接下来,我将解释 VBA 语言的语法。


<<相关文章一览>>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文