跳到主要内容

Excel VBA 代码名称详解

代码名称

工作簿和工作表模块有一个名为 CodeName 的属性,这是对象在 VBA 内部的识别方式。 默认情况下,工作簿代号为 ThisWorkbook,每个工作表模块对于 Worksheets 为 Sheet1Sheet2 等,对于 ChartSheets 为 Chart1Chart2 等。 您可以像使用普通变量一样在 VBA 代码中使用这些名称。 例如

Msgbox ThisWorkbook.Name

或者

Msgbox Sheet1.Name 

这种引用方式非常有用,即使用户在 Excel 中重命名了工作表,您始终都可以引用重命名的工作表,您的 VBA 代码不会罢工。

例如,如果您有一张名为“Sheet1”的工作表,则其名称和代码名称都将是 Sheet1。 但是如果用户将工作表重命名为 MySheet,代码:

Msgbox Worksheets("Sheet1").Name

将出错,因为名称为 Sheet1 的工作表不存在了。 然而,代码:

Msgbox Sheet1.Name

将继续有效,因为 VBA 通过其代码名称 Sheet1 知道其引用的工作表。

在属性窗口中重命名代码名称

您可以重命名 ThisWorkbookSheet 对象的代码名称。如果在这些模块中已有代码后再执行此操作,则可能会遇到问题,因此建议只有在以下情况下才执行此操作:

  1. 知道您正在做什么
  2. 您需要这样做

要重命名模块的代码名称:

  1. 在【工程资源管理器】窗口中选择需要更改代码名称的对象。
  2. 打开【属性】窗口(按快捷键 F4 或单击 VBE 菜单栏中的【视图】【属性窗口】),
  3. 更改【名称】属性。
    在属性窗口中重命名代码名称
    在属性窗口中重命名代码名称

如果您重命名 ThisWorkbook 的代码名称,ThisWorkbook 将继续引用工作簿对象。例如,如果将 ThisWorkbook 对象的代码名称更改为 MyWorkbook,则以下两行代码都将有效:

Msgbox ThisWorkbook.Name
Msgbox MyWorkbook.Name

但是,如果将 Sheet1 对象的代码名称更改为 MySheet,则以下代码将出错:

Msgbox Sheet1.Name

因为不再有代码名称为 Sheet1 的工作表对象。

使用 VBA 重命名代码名称

此外,您可以使用 VBA 重命名对象的代码名称。但是,这可能会导致很多问题,所以再次强调,除非您知道自己在做什么并且确实需要这样做,否则不要这样做。

例如,要将代码名称为 Sheet1 的工作表的代码名称更改为 NewCodeName,请使用:

ThisWorkbook.VBProject.VBComponents("Sheet1").Name = "NewCodeName"

如果运行此代码并收到错误消息:运行时错误 '1004‘: 不信任到 Visual Basic Project 的程序连接

运行时错误
运行时错误 '1004‘: 不信任到 Visual Basic Project 的程序连接

要解决此问题,请阅读:运行时错误 '1004‘: 不信任到 Visual Basic Project 的程序连接

例如,要将 ThisWorkbook 对象的代码名称更改为 NewWorkbookName,请使用:

ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Name = "NewWorkbookName"

但是这样做只是为了让事情变得更复杂,当您更改 ThisWorkbook 对象的代码名称,并且您正在使用 VBA 扩展库时,代码:

Msgbox ThisWorkbook.Name

将继续工作,但是

Msgbox ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Name

将出错,因为没有代码名称为 ThisWorkbook 的对象。

通常,更改代码名称不适合 VBA 新手。

评论

您的电子邮件地址不会显示出来。*号为必填项。