vba中名称的使用.docx
- 文档编号:6209172
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:7
- 大小:17.52KB
vba中名称的使用.docx
《vba中名称的使用.docx》由会员分享,可在线阅读,更多相关《vba中名称的使用.docx(7页珍藏版)》请在冰豆网上搜索。
vba中名称的使用
[转载]VBA中名称的使用
VBA中名称的使用
在VBA中对名称的基本操作
(1)创建名称
①可以使用下面的代码在当前工作簿中创建名称:
ActiveWorkbook.Names.AddName:
="MyName",RefersToR1C1:
="=Sheet1!
R2C2:
R6C4"或者ActiveWorkbook.Names.AddName:
="MyName",RefersTo:
="=Sheet1!
$B$2:
$D$6"
上面的代码在当前工作簿中将工作表Sheet1内的区域B2:
D6命名为MyName,该名称为全局名称。
在所命名的名称中不能出现空格和单元格引用,并且,如果对命名区域使用A1样式的引用,则最后使用绝对引用,否则所命名的区域将会不确定。
在所命名的名称前加上工作表名,则创建局部名称,如:
ActiveWorkbook.Names.AddName:
="Sheet1!
MyName1",RefersTo:
="=Sheet1!
$B$2:
$D$6"
上面的代码在工作表Sheet1中命名区域B2:
D6为MyName1,该名称为局部名称。
也通过引用指定工作表来创建局部名称,如:
Worksheets("sheet2").Names.AddName:
="MyName2",RefersTo:
="=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.AddName:
="MyName5",RefersTo:
="=Sheet1!
$E$6:
$F$8"
上面的代码在工作表Sheet2中命名工作表Sheet1中单元格区域E6:
F8为MyName5,该名称为Sheet2中的局部名称。
④命名数字
Names.AddName:
="NameNumber",RefersTo:
=666,将数字666命名为NameNumber。
⑤命名字符串
Names.AddName:
="NameString",RefersTo:
="TV",将字符串TV命名为NameString。
⑥命名数组
DimMyArray(10)
DimiAsInteger
Fori=1To10
MyArray(i)=i
Nexti
Names.AddName:
="NameArray",RefersTo:
=MyArray
上述代码先对数组赋值,然后指定名称。
⑦命名公式
Names.AddName:
="NameFormlas",RefersTo:
="=OFFSET(Sheet1!
$A$1,0,0,COUNTA(Sheet1!
$A:
$A),1)"
上面的代码命名了一个公式,可以用来创建动态表格或引用动态的区域。
使用上面的方法来命名数字、字符串、数组或公式存储经常要使用的值,比将该值存放在单元格中更有优势,它可以避免该值被易外修改并减少了对象的引用。
(2)重命名已有的名称
Worksheets("Sheet2").Names("MyName5").Name="MyName6"
上面的代码将工作表Sheet2中的局部名称MyName5改名为MyName6。
但这种方法只能在单元格或单元格区域中进行重命名使用,而不能重命名代表公式、数组和字符串的名称。
(3)改变所选区域所命名的名称的引用区域
Worksheets(“Sheet1”).Names.AddSelection.Name.Name,Sheet1.Range(“B3:
C4”)
上面的代码将原来所选区域的名称的引用区域改为单元格区域B3:
C4,即该名称所代表的区域已变为B3:
C4,原来命名区域名称被取消。
(4)提取命名区域。
使用Evaluate方法,例如:
代码Evaluate("MyName").Interior.ColorIndex=3将工作表中名称MyName所代表的单元格区域的背景设置为红色。
(5)隐藏名称
Names.AddName:
="HideName",RefersTo:
="=$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]检查当前工作簿中某名称是否存在
Subtest()
DimstrAsBoolean
str=NameExists("myName")
Ifstr=TrueThen
MsgBox"该名称存在于当前工作簿中."
Else
MsgBox"该名称不存在."
EndIf
EndSub
‘---------------------
FunctionNameExists(FindNameAsString)AsBoolean
DimrngAsRange
DimmyNameAsString
OnErrorResumeNext
myName=ActiveWorkbook.Names(FindName).Name
IfErr.Number=0ThenNameExists=True
EndFunction
或者:
FunctionNameExists(TheNameAsString)AsBoolean
OnErrorResumeNext
NameExists=Len(ThisWorkbook.Names(TheName).Name)<>0
EndFunction[示例2]工作簿中的所有名称可见
SubUnHideName()
DimNmAsName
ForEachNmInNames
Nm.Visible=True
Next
EndSub[示例3]列出当前工作簿中所有名称的相关信息
SubShowNames()
DimNAsInteger
ForN=1ToActiveWorkbook.Names.Count
OnErrorResumeNext
Cells(N,1)="'"&ActiveWorkbook.Names(N).Name
Cells(N,2)="'"&ActiveWorkbook.Names(N).RefersToRange.Address
Cells(N,3)="'"&ActiveWorkbook.Names(N).ShortcutKey
Cells(N,4)="'"&ActiveWorkbook.Names(N).Visible
Next
EndSub[示例4]显示当前单元格所命名的名称
SubShowNames_activecell()
OnErrorResumeNext
MsgBoxActiveCell.Name.Name
SelectCaseErr.Number
Case0
Case1004
MsgBox"单元格"&ActiveCell.Address(4)&“没有命名。
”
CaseElse
MsgBoxErr.Number&"--"&Err.Description
EndSelect
EndSub
示例说明:
如果要获取指定单元格所定义的名称,可以使用Name属性两次。
[示例5]删除当前工作簿中含有“name”字符的名称
SubDeleteName()
DimNmAsName
ForEachNmInActiveWorkbook.Names
IfNm.NameLike"*name*"Then
Nm.Delete
EndIf
NextNm
EndSub[示例6]判断某单元格或单元格区域是否与命名区域部分重叠(ByChipPearson)
FunctionNameOfParentRange(RngAsRange)AsString
DimNmAsName
ForEachNmInThisWorkbook.Names
IfRng.Parent.Name=Nm.RefersToRange.Parent.NameThen
IfNotApplication.Intersect(Rng,Nm.RefersToRange)IsNothingThen
NameOfParentRange=Nm.Name
ExitFunction
EndIf
EndIf
NextNm
NameOfParentRange=""
EndFunction
示例说明:
如果Rng所代表的单元格或单元格区域与命名区域相交叉,则返回命名区域的名称,否则返回空。
名称的高级操作
(下面的内容整理自ChipPearson的文章)
[增大名称框的尺寸]
在Excel工作表的名称框中(如图1所示),大约只能显示16个字符,当超过它所能容纳的字符时,后面的字符将会被截取,将不能看到完整的名称,这对前面的字符相同而区别在最后几个字符的名称来说,很不方便,但是在Excel中没有改变名称框尺寸的设置。
这可通过调用WindowsAPI来解决,通过调用API来增加下拉框的宽度。
在VBE编辑器中插入一个标准模块,并输入以下的代码:
PublicDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"_
(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PublicDeclareFunctionFindWindowExLib"user32"Alias"FindWindowExA"_
(ByValhWnd1AsLong,ByValhWnd2AsLong,_
ByVallpsz1AsString,ByVallpsz2AsString)AsLong
PublicDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"_
(ByValhwndAsLong,ByValwMsgAsLong,_
ByValwParamAsLong,lParamAsAny)AsLong
‘-------------------------
SubWidenNameBoxDrop2()
DimResAsLong
ConstCB_SETDROPPEDWIDTH=&H160
ConstcWidth=400'<<<<<<<<<<<<<<<<<<<<<<
Res=SendMessage(_
FindWindowEx(_
FindWindowEx(_
FindWindow("XLMAIN",Application.Caption)_
0,"EXCEL;",vbNullString)_
0,"combobox",vbNullString),_
CB_SETDROPPEDWIDTH,cWidth,0)
EndSub
示例说明:
上述代码运行前后的结果如图3和图4所示。
在上面的代码中,可以通过改变常量cWidth(<<<所示的代码行)的值来定义下拉框的宽度。
图3:
原名称框
图4:
修改后的名称框[为名称框定义快捷键]
Excel提供的快捷键中没有名称框的快捷键。
但是,您能使用VBA代码设置快捷键,以方便能快速定位到名称框。
在VBE编辑器中,插入一个标准模块,并输入以下代码:
PublicDeclareFunctionSetFocusLib"user32"(ByValhwndAsLong)AsLong
PublicDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"_
(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PublicDeclareFunctionFindWindowExLib"user32"Alias"FindWindowExA"_
(ByValhWnd1AsLong,ByValhWnd2AsLong,_
ByVallpsz1AsString,ByVallpsz2AsString)AsLong
‘-------------------------
SubSetFocusNameBox()
DimResAsLong
Res=SetFocus(_
FindWindowEx(_
FindWindowEx(_
FindWindow("XLMAIN",Application.Caption)_
0,"EXCEL;",vbNullString)_
0,"combobox",vbNullString))
EndSub
在Excel中,选择菜单“工具——宏——宏”命令,调出“宏”对话框,为刚创建的SetFocusNameBox代码指定快捷键,如Ctrl+Shift+N。
那么,以后在该工作簿中,按下Ctrl+Shift+N组合键,即可定位到名称对话框。
Byfanjyin2006-11-16
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vba 名称 使用
![提示](https://static.bdocx.com/images/bang_tan.gif)