分享

Excel VBA解读(69):工作表名称——Name属性

 江上向东数峰青 2017-07-21

 

工作表名称让我们能够方便地识别工作表,可以给工作表取一个具有特定意义的名称。在VBA代码中,还可以使用工作表对象名称。

 

理解工作表名称

在下图1中,我们示意出了工作表名称和工作表对象名称。(仔细研读过Excel VBA解读系列文章的朋友肯定对这张图有印象,它就是我们在《ExcelVBA解读(7):看看Excel的那些常用对象(续1》中介绍Worksheet对象时使用的图)

图1

工作表名称就是我们在工作表界面下方看到的工作表标签,可以在工作表标签中单击右键,在弹出的菜单中选择“重命名”来修改工作表名称,也可以在工作表标签中双击来修改工作表名称。在VBE界面中,我们可以在其左侧的工程资源管理器中看到在括号中的工作表名称,如图1中红色横线所示,在工作表界面中修改工作表名称后,该处也随之改变为一致,如图中的“完美Excel”。

工作表对象名称VBE界面工程资源管理器工作表名称左侧,如上图1中椭圆圈所示。可以选择工作表对象后,在属性窗口修改工作表对象名称,例如下图2所示,将“Sheet1”修改为“excelperfet”。

图2

 

本文将介绍这两种代表工作表的名称在VBA中的表示及应用。

 

Name属性

VBA中,使用Name属性获取或者设置工作表名称,即工作簿底部工作表标签显示的字符串Sheet1Sheet2Sheet3等,如下图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

说明

  • Name属性获取工作表名称。

  • 语句''''& ws.Name & ''''中各4个双引号设置在显示时显示双引号。

 

运行代码后的效果如下图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

说明

  • Tab属性返回代表工作表标签的Tab对象。

运行代码后的效果如下图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

说明

  • StrComp函数比较指定的字符串并返回代表比较结果的值,返回0表示两个字符串相同。

 


本文属原创文章,转载请联系我(xhdsxfjy@163.com)或者注明出处。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多