问题描述
|
我正在尝试通过其CodeName属性引用新添加的工作表。问题是,除非从调试器运行,否则CodeName返回空字符串。
Set tableSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
MsgBox tableSheet.CodeName
除非我在MsgBox行上设置断点,否则即使这个简单的示例也无法正常工作。
这是什么问题?
解决方法
我能够复制您的问题。一些谷歌搜索显示了这个答案:
Sub test()
Dim tablesheet As Excel.Worksheet
Set tablesheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
MsgBox ThisWorkbook.VBProject.VBComponents(tablesheet.Name).Properties(\"Codename\")
End Sub
我认为您必须在“工具”>“参考”中检查Microsoft Visual Basic for Applications Extensibility 5.3。
,我可以确认这种行为。我以前从未使用过“ 2”,有时也使用“ 3”来引用图纸。
Sub Test()
Dim tableSheet As New Worksheet
Set tableSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
MsgBox tableSheet.Name
End Sub
这会在ѭ5中给出工作表的名称,不仅可读,而且您可以根据需要更改工作表的名称。
,对于由宏创建的新工作表,我也有类似的问题(除非打开宏编辑器,否则工作表的代号将为空)。
就我而言,由于我需要代码名称才能在新工作表中插入一些宏。因此,我使用以下代码,它可以正常工作。由于我的\'VBComponents.item \'的代码访问名称属性,即工作表的codeName属性,似乎codeName会有价值。
注意:我不确定为什么,下面的代码会自动打开VBA编辑器。
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Set VBProj = ActiveWorkbook.VBProject
Dim i
For i = 1 To VBProj.VBComponents.Count
If VBProj.VBComponents.Item(i).Name = ActiveSheet.CodeName Then
Set VBComp = VBProj.VBComponents.Item(i)
End If
Next