VBA基础语法:变量

[亡魂溺海] 提交于 2020-01-12 16:41:36

目录

声明变量

Visual Basic 的命名规则

使用 Public 语句

使用 Private 语句

使用 Static 语句

使用 Option Explicit 语句

为自动化声明一个对象变量

写赋值语句

声明常数


声明变量

通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。

下面的示例创建了变量 strName 并且指定为 String 数据类型

Dim strName As String

如果该语句出现在过程中,则变量 strName 只可以在此过程中被使用。如果该语句出现在模块的声明部分,则变量 strName 可以被此模块中所有的过程所使用,但是不能被同一工程中不同的模块所含过程来使用。为了使变量可被工程中所有的过程所使用,则在变量前加上 Public 语句,如以下的示例:

Public strName As String

关于命名变量的详细信息,请参阅 Visual Basic 帮助中的“Visual Basic 命名规则”。

Visual Basic 的命名规则

当在 Visual Basic 的模块中为过程常数变量以及参数命名时,可以使用下列的规则:

  • 第一个字符必须使用英文字母。
  • 不能在名称中使用空格、句点(.)、惊叹号(!)、或 @&$# 等字符。
  • 名称的长度不可以超过 255 个字符。
  • 通常,使用的名称不能与 Visual Basic 本身的 Function 过程语句以及方法的名称相同。必须退出使用与程序语言的关键字相同的名称。若所使用的内在语言函数,语句或方法与所指定的名称相冲突,则必须显示地识别它。常规会将内建函数,语句或方法的名称之前加上关联的类型库的名称。例如,如果有一个名为 Left 的变量,则只能用 VBA.Left 来调用 Left 函数。
  • 不能在范围的相同层次中使用重复的名称。例如,不能在同一过程中声明两个命名为 age 的变量。然而,可以在同一模块中声明一个私有的命名为 age 的变量和过程的级别的命名为 age 的变量。
  • 注意 Visual Basic 不区分大小写,但它会在名称被声明的语句处保留大写。
     

变量可以声明成下列数据类型中的一种:BooleanByteIntegerLongCurrencySingleDoubleDateString(变长字符串)、String * length (定长字符串)、ObjectVariant。如果未指定数据类型,则 Variant 数据类型被赋予缺省。也可以使用 Type 语句来创建用户定义类型。关于数据类型的详细信息,请参阅 Visual Basic 帮助中的“数据类型总结”。

 

可以在一个语句中声明几个变量。而为了指定数据类型,必须将每一个变量的数据类型包含进来。在下面的语句中,变量 intXintY、与 intZ 被声明为 Integer 类型。

Dim intX As Integer, intY As Integer, intZ As Integer

在下面的语句中,变量 intX intY 被声明为 Variant 类型 ;只有 intZ 被声明为 Integer 类型。

Dim intX, intY, intZ As Integer

在声明语句中,不一定要提供变量的数据类型。若省略了数据类型,则会将变量设成 Variant 类型。

使用 Public 语句

可以使用 Public 语句去声明公共模块级别变量。

Public strName As String

公有变量可用于工程中的任何过程。如果公有变量是声明于标准模块或是类模块中,则它也可以被任何引用到此公有变量所属工程的工程中使用。

使用 Private 语句

可以使用 Private 语句去声明私有的模块级别变量。

Private MyName As String

私有变量只可使用于同一模块中的过程。

注意 在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易的读取和解释代码。

使用 Static 语句

当使用 Static 语句取代 Dim 语句时,所声明的变量在调用时仍保留它原先的值。

使用 Option Explicit 语句

在 Visual Basic 中可以简单地通过一个赋值语句来隐含声明变量。所有隐含声明变量都为 Variant 类型,而 Variant 类型变量比大多数其它类型的变量需要更多的内存资源。如果显示地声明变量为指定的数据类型,则应用程序将更有效。显示声明所有变量减少了命名冲突以及拼写错误的发生率。

如果不想使 Visual Basic 生成隐含声明,可以将 Option Explicit 语句放置于模块中所有的过程之前。这一个语句要求对模块中所有的变量做显示地声明。如果模块包含 Option Explicit 语句,则当 Visual Basic 遇到一个先前未定界的变量或拼写错误,它会发生编译时间的错误。

可以设置 Visual Basic 程序环境中的某个选项,使得自动在所有新的模块中包含 Option Explicit 语句。请参阅应用程序的文档来得知如何更改 Visual Basic 环境选项,请注意这个选项并不会改变已写好的存在的代码。

注意 必须显示地声明固定大小的数组与动态数组。

为自动化声明一个对象变量

当使用一个应用程序去控制另外一个应用程序的对象时,应该设置一个对于其它应用程序的类型库的引用。若设置一个引用,则可以根据它们最常指定的类型来声明对象变量。例如,如果是在 Microsoft Word 中,当对 Microsoft Excel 类型库做一引用设置时,可以在 Microsoft Word 中声明 Worksheet 类型的变量来表示 Microsoft Excel 中的 Worksheet 对象。

如果使用其它的应用程序去控制 Microsoft Access 对象,在多数情况下,可以根据它们最常指定的类型来声明对象变量。也可以使用关键字 New 去自动生成一个对象的新实例。然而,可能要指示它是 Microsoft Access 对象。例如,当在 Microsoft Visual Basic 里面声明一个对象变量去表示 Microsoft Access form 时,必须区别它是 Microsoft Access Form 对象或是 Visual Basic Form 对象。所以在声明变量的语句中必须要包含类型库的名称,如下面示例所示:

Dim frmOrders As New Access.Form

某些应用程序并不能识别特别的 Microsoft Access 对象类型。既使已经在这些应用程序中设置了一个对 Microsoft Access 类型库的引用,必须声明所有 Microsoft Access 对象变量为 Object 类型。不能使用 New 关键字去创建这个对象的新实例。下面的示例显示了,不能识别 Microsoft Access 对象类型的应用程序,如何去声明一个变量用来表示 Microsoft Access Application 对象。然后应用程序创建一个 Application 对象的实例。

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")

写赋值语句

赋值语句指定一个值或表达式变量常数。赋值语句通常会包含一个等号(=)。下面示例,指定 InputBox 函数的返回值给变量 yourName

Sub Question()
    Dim yourName As String
    yourName = InputBox("What is your name?")
    MsgBox "Your name is " & yourName
End Sub

Let 语句是可选的,而通常为省略。例如,上述的赋值语句可以写成:

Let yourName = InputBox("What is your name?")

Set 语句可被用来指定一个对象给已声明成对象的变量。而 Set 关键字是必备的。下面示例中,Set 语句指定 Sheet1 上的一个范围给对象变量 myCell

Sub ApplyFormat()
Dim myCell As Range
Set myCell = Worksheets("Sheet1").Range("A1")
    With myCell.Font
        .Bold = True
        .Italic = True
    End With
End Sub

设置属性值的语句也是一个赋值语句。下面的示例,将设置对于活动单元格 Font 对象的 Bold 属性:

ActiveCell.Font.Bold = True

声明常数

通过声明一个常数,可以将有意义的名称赋予一个值。使用 Const 语句去声明一个常数,并且设置它的值;而在常数声明完之后,则不能加以更改或赋予新值。

在声明部分,可以在过程中或者在模块顶部声明常数。模块级别中的常数缺省为私有的。若要声明一个公共模块级别常数,则可以在 Const 语句前加上 Public 这个关键字。也可以利用在 Const 语句前加上 Public 关键字来明确的声明一个私有的常数,使得我们可更容易的去读取并且解释代码。若需更多信息,请参阅 Visual Basic 帮助中的“了解范围与可见性”。

下面的示例,声明了一个 Public 常数 conAge Integer 类型,并且指定它的值为 34

Public Const conAge As Integer = 34

常数可以声明成下列数据类型中的一种:BooleanByteIntegerLongCurrencySingleDoubleDateStringVariant。因为已经知道常数的值,所以可以指定 Const 语句中的数据类型。关于数据类型的详细信息,请参阅 Visual Basic 帮助中的“数据类型总结”。

可以在一个语句中声明数个常数。为了指定数据类型,必须将每一个常数的数据类型包含进来。在下面的语句中,常数 conAge conWage 被声明为 Integer 类型。

Const conAge As Integer = 34, conWage As Currency = 35000

 source:VBA 帮助文档

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!