代码名称
工作簿和工作表模块有一个名为 CodeName
的属性,这是对象在 VBA 内部的识别方式。 默认情况下,工作簿代号为 ThisWorkbook
,每个工作表模块对于 Worksheets 为 Sheet1
、Sheet2
等,对于 ChartSheets 为 Chart1
、Chart2
等。 您可以像使用普通变量一样在 VBA 代码中使用这些名称。 例如
Msgbox ThisWorkbook.Name
或者
Msgbox Sheet1.Name
这种引用方式非常有用,即使用户在 Excel 中重命名了工作表,您始终都可以引用重命名的工作表,您的 VBA 代码不会罢工。
例如,如果您有一张名为“Sheet1”的工作表,则其名称和代码名称都将是 Sheet1
。 但是如果用户将工作表重命名为 MySheet
,代码:
Msgbox Worksheets("Sheet1").Name
将出错,因为名称为 Sheet1
的工作表不存在了。 然而,代码:
Msgbox Sheet1.Name
将继续有效,因为 VBA 通过其代码名称 Sheet1
知道其引用的工作表。
在属性窗口中重命名代码名称
您可以重命名 ThisWorkbook
或 Sheet
对象的代码名称。如果在这些模块中已有代码后再执行此操作,则可能会遇到问题,因此建议只有在以下情况下才执行此操作:
- 知道您正在做什么
- 您需要这样做
要重命名模块的代码名称:
- 在【工程资源管理器】窗口中选择需要更改代码名称的对象。
- 打开【属性】窗口(按快捷键 F4 或单击 VBE 菜单栏中的【视图】【属性窗口】),
- 更改【名称】属性。
如果您重命名 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 的程序连接。
例如,要将 ThisWorkbook
对象的代码名称更改为 NewWorkbookName
,请使用:
ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Name = "NewWorkbookName"
但是这样做只是为了让事情变得更复杂,当您更改 ThisWorkbook
对象的代码名称,并且您正在使用 VBA 扩展库时,代码:
Msgbox ThisWorkbook.Name
将继续工作,但是
Msgbox ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Name
将出错,因为没有代码名称为 ThisWorkbook
的对象。
通常,更改代码名称不适合 VBA 新手。