工作表名称让我们能够方便地识别工作表,可以给工作表取一个具有特定意义的名称。在VBA代码中,还可以使用工作表对象名称。
理解工作表名称 在下图1中,我们示意出了工作表名称和工作表对象名称。(仔细研读过Excel VBA解读系列文章的朋友肯定对这张图有印象,它就是我们在《ExcelVBA解读(7):看看Excel的那些常用对象(续1)》中介绍Worksheet对象时使用的图) 图1 工作表名称就是我们在工作表界面下方看到的工作表标签,可以在工作表标签中单击右键,在弹出的菜单中选择“重命名”来修改工作表名称,也可以在工作表标签中双击来修改工作表名称。在VBE界面中,我们可以在其左侧的工程资源管理器中看到在括号中的工作表名称,如图1中红色横线所示,在工作表界面中修改工作表名称后,该处也随之改变为一致,如图中的“完美Excel”。 工作表对象名称在VBE界面工程资源管理器工作表名称左侧,如上图1中椭圆圈所示。可以选择工作表对象后,在属性窗口修改工作表对象名称,例如下图2所示,将“Sheet1”修改为“excelperfet”。 图2
本文将介绍这两种代表工作表的名称在VBA中的表示及应用。
Name属性 在VBA中,使用Name属性获取或者设置工作表名称,即工作簿底部工作表标签显示的字符串Sheet1、Sheet2、Sheet3等,如下图3所示。 图3 下面的语句: Worksheets('Sheet1').Name= '完美Excel' 将工作表Sheet1的名字修改为“完美Excel”,如下图4所示。 图4 下面的语句获取当前工作表的名称: ActiveSheet.Name
示例1:获取当前工作簿所有工作表的名称 下面的代码获取并显示上文所示工作簿中所有工作表名称: Sub GetWorksheetName() Dim ws As Worksheet Dim str As String
'遍历工作表并获取其名称 For Each ws In Worksheets str = str &'''' & ws.Name & '''' Next ws
MsgBox '当前工作簿中工作表名称分别为' & str End Sub 说明:
运行代码后的效果如下图5所示: 图5 示例2:以当天日期命名当前工作表名称 下面是VBA帮助文档中的示例代码,设置当前工作表名称为当天的日期。 Sub NameWorksheetByDate() Range('D5').Select '在单元格D5中输入公式,获取今天的日期 Selection.Formula ='=text(now(),''mmm ddd yyyy'')' '复制文本并粘贴值 Selection.Copy Selection.PasteSpecialPaste:=xlValues '消除单元格周边虚框 Application.CutCopyMode =False '以单元格D5中的值命名当前工作表 ActiveSheet.Name =Range('D5').Value '清除单元格D5中的值 Range('D5').Value = '' End Sub 说明:
示例3:设置工作表标签颜色 下面的代码设置工作表“完美Excel”标签的颜色为绿色: Sub SetWorksheetTabColor() Sheets('完美Excel').Tab.Color= vbGreen End Sub 说明:
运行代码后的效果如下图6所示: 图6 示例4:检查工作表是否已存在 在代码中操作指定的工作表之前,我们可以先检查该工作表是否存在,以确保操作的有效性。 代码如下: Function WorksheetIsExists(strName As String) As Boolean Dim str As String
On Error GoTo ErrHandle
'获取变量strName表示的工作表名称 '如果变量strName表示的名字的工作表存在,则将其名称赋给变量str '否则,导致错误.跳转至ErrHandle语句 str =Worksheets(strName).Name WorksheetIsExists = True Exit Function
ErrHandle: WorksheetIsExists = False End Function 下面的代码使用上述自定义函数检查指定名称的工作表是否存在,然后进行操作: Sub testWorksheetIsExists() Dim ws As Worksheet Dim str As String
str = 'Sheet3' '指定工作表名称
'如果工作表存在,则将该工作表赋值给变量 If WorksheetIsExists(str)Then Set ws =Worksheets(str) Else Set ws = Nothing End If
'如果工作表存在,则在该工作表单元格A1中输入值 If Not ws Is Nothing Then ws.Range('A1').Value= '完美Excel' End If End Sub
CodeName属性 CodeName属性返回工作表对象名称,例如语句: Worksheets('Sheet3').CodeName 将获取工作表Sheet3的对象名称。 CodeName属性为只读属性,不能使用该属性修改工作表对象名称。 一般情况下,Excel默认工作表名称和工作表对象名称相同。这两个名称可以各自修改,但修改一个名称不会自动修改另一个名称。
示例5:更改工作表对象名称 除了在属性窗口中手工修改工作表对象名称外,还可以使用代码来修改。此时,要使用VBE对象模型。 首先,在Excel中选择“开发工具”选项卡中的“宏安全性”,在“信任中心”的“宏设置”下选取“信任对VBA工程对象模型的访问”,如下图7所示。 图7 然后,在VBE中,选择“工具”——“引用”,在“引用”对话框中,选取“Microsoft Visual Basic for Applications Extensibility 5.3”,单击“确定”,如下图8所示。 图8 下面的代码将工作表“Sheet2”的对象名称修改为“完美Excel”: Sub ChangeWorksheetObjectName() Dim ws As Worksheet Dim strOldCodeName AsString Dim strNewCodeName AsString
'将要修改名称的工作表赋值给变量 Set ws =Worksheets('Sheet2')
'获取现在的工作表对象名称 strOldCodeName =ws.CodeName
'设置新名称 strNewCodeName = '完美Excel'
'修改工作表对象名称为新名称 ThisWorkbook.VBProject. _ VBComponents(strOldCodeName). _ Properties('_CodeName') = strNewCodeName End Sub 运行代码后的效果如下图9所示: 图9
示例6:检查工作表对象名称是否已存在 下面的代码检查指定的工作表对象名称是否存在: Function WorksheetCodeNameIsExists(strCodeName As String) As Boolean Dim ws As Worksheet Dim str As String
WorksheetCodeNameIsExists= False '遍历工作表 For Each ws In Worksheets '比较指定的名称与已有工作表对象名称 IfStrComp(ws.CodeName, strCodeName, vbTextCompare) = 0 Then WorksheetCodeNameIsExists = True End If Next ws End Function 说明:
本文属原创文章,转载请联系我(xhdsxfjy@163.com)或者注明出处。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。 |
|