VBA中名称的使用

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VBA中名称的使用

理解工作表中的名称

在Excel工作表中,一般可以通过两种方式来定义名称。第一种方式是直接在“名称框”(如图1所示)中输入名字来命名所选定的单元格或单元格区域,通常,在名称框中显示的是所在单元格的行号列标,单击其右侧的下拉箭头,可以看到工作簿中的名称列表。第二种方式是使用“定义名称”对话框来指定名称(选取菜单“插入——名称——定义”命令后,调出“定义名称”对话框,如图2所示),在该对话框中,可以定义名称常量和动态名称,而这些名称则不会出现在“名称框”中。

图1:名称框

图2:定义名称对话框

名称又分为全局名称和局部名称。全局名称可以在当前工作簿中的任一工作表中使用,而局部名称只能在指定的工作表中使用。如图2中所示,name1为全局名称,name2为局部名称,即局部名称所在的工作表在该名称的右侧。

此外,正如前所述,还可以在“定义名称”框中定义名称常量,如图2中的x。还可以动态命名,如图2中的NameList。它们在引用位置中进行输入。

通过在工作表中定义名称,可以更好的管理工作表数据,方便地编写公式和设置表格。正如在工作表中定义和使用名称一样,在VBA中也可以创建和使用名称,并能利用名称处理工作表中的数据。

在VBA中对名称的基本操作

(1) 创建名称

①可以使用下面的代码在当前工作簿中创建名称:

s.Add Name:="MyName", RefersT oR1C1:="=Sheet1!R2C2:R6C4"

或者s.Add Name:="MyName", RefersT o:="=Sheet1!$B$2:$D$6" 上面的代码在当前工作簿中将工作表Sheet1内的区域B2:D6命名为MyName,该名称为全局名称。在所命名的名称中不能出现空格和单元格引用,并且,如果对命名区域使用A1样式的引用,则最后使用绝对引用,否则所命名的区域将会不确定。

在所命名的名称前加上工作表名,则创建局部名称,如:

Active s.Add Name:="Sheet1!MyName1", RefersT o:="=Sheet1!$B$2:$D$6"

上面的代码在工作表Sheet1中命名区域B2:D6为MyName1,该名称为局部名称。

也通过引用指定工作表来创建局部名称,如:

Worksheets("sheet2").Names.Add Name:="MyName2", RefersT o:="=Sheet2!$A$1:$B$3" 上面的代码在工作表Sheet2中创建一个局部名称MyName2,代表Sheet2中的单元格区域A1:B3。

②一种简单的命名方法。例如:

Worksheets("Sheet1").Range("B8:C10").Name = "MyName3"

上面的代码将工作表Sheet1中的单元格区域B8:C10命名为MyName3,为全局名称。Worksheets("Sheet2").Range("H15:G16").Name = "Sheet2!MyName4"

上面的代码将工作表Sheet2中的单元格区域H15:G16命名为MyName4,为局部名称。注意,这种方法只能应用于命名单元格区域,不能够用来命名公式、数字等。

③在当前工作表中命名局部区域,该区域为其它工作表中的单元格区域。

Worksheets("Sheet1").Range("E6:F8").Name = "Sheet2!MyName5"

或者:

Worksheets("sheet2").Names.Add Name:="MyName5", RefersT o:="=Sheet1!$E$6:$F$8" 上面的代码在工作表Sheet2中命名工作表Sheet1中单元格区域E6:F8为MyName5,该名称为Sheet2中的局部名称。

④命名数字

Names.Add Name:="NameNumber", RefersT o:=666,将数字666命名为NameNumber。

⑤命名字符串

Names.Add Name:="NameString", RefersT o:="TV",将字符串TV命名为NameString。

⑥命名数组

Dim MyArray(10)

Dim i As Integer

For i = 1 T o 10

MyArray(i) = i

Next i

Names.Add Name:="NameArray", RefersT o:=MyArray

上述代码先对数组赋值,然后指定名称。

⑦命名公式

Names.Add Name:="NameFormlas", RefersT o:="=OFFSET(Sheet1!$A$1,0,0,COUNT A(Sheet1!$A:$A),1)" 上面的代码命名了一个公式,可以用来创建动态表格或引用动态的区域。

使用上面的方法来命名数字、字符串、数组或公式存储经常要使用的值,比将该值存放在单元格中更有优势,它可以避免该值被易外修改并减少了对象的引用。

(2) 重命名已有的名称

Worksheets("Sheet2").Names("MyName5").Name = "MyName6"

上面的代码将工作表Sheet2中的局部名称MyName5改名为MyName6。但这种方法只能

在单元格或单元格区域中进行重命名使用,而不能重命名代表公式、数组和字符串的名称。

(3) 改变所选区域所命名的名称的引用区域

Worksheets(“Sheet1”).Names.Add ,Sheet1.Range(“B3:C4”)

上面的代码将原来所选区域的名称的引用区域改为单元格区域B3:C4,即该名称所代表的区域已变为B3:C4,原来命名区域名称被取消。

(4) 提取命名区域。使用Evaluate方法,例如:

代码Evaluate("MyName").Interior.ColorIndex = 3将工作表中名称MyName所代表的单元格区域的背景设置为红色。

(5) 隐藏名称

Names.Add Name:="HideName", RefersT o:="=$A$1:$C$3", Visible:=False,将隐藏所创建的名称。注意,如果再创建的名称与所隐藏的名称相同,则被隐藏的名称将被覆盖。

(6) 删除名称

Names("MyName3").Delete

上面的代码删除当前工作簿中的名称MyName3。

注意,当前工作簿中重命名已有名称和删除名称时,要注意所要操作的名称是全局名称还是局部名称。如果为局部名称,则必须在代码中加上该名称所在工作表的引用。

命名名称注意事项

(1) 名称的最大长度为255个字符。

(2) 名称可以字母、空格或下划线开头。

(3) 名称中不能包含空格、连字线等字符。

(4) 避免在名称中使用与单元格引用相同的字符,如A1、G11等。

(5) 避免在名称中使用Excel的保留字,如:Criteria、Database、Extract、Print_Area、Print_Titles等。

一些示例

[示例1] 检查当前工作簿中某名称是否存在

Sub test()

Dim str As Boolean

str = NameExists("myName")

If str = True Then

MsgBox "该名称存在于当前工作簿中."

Else

MsgBox "该名称不存在."

End If

End Sub

‘- - - - - - - - - - - - - - - - - - - - -

Function NameExists(FindName As String) As Boolean

相关文档
最新文档