Excel选项卡表名称与Visual Basic工作表名称

Ste*_*mes 18 excel vba worksheet excel-vba

似乎Visual Basic不能根据用户修改的工作表名称引用工作表.工作表选项卡可以更改其名称,但似乎Visual Basic仍然将工作表名称视为Sheet1等,尽管工作簿选项卡已更改为有用的东西.

我有这个:

TABname = rng.Worksheet.Name  ' Excel sheet TAB name, not VSB Sheetx name.
Run Code Online (Sandbox Code Playgroud)

但我想在Visual Basic例程中使用工作表名称.到目前为止我能得到的最好的是选择Case Case the Worksheet Tab与Visual Basic名称,这不是我的一天.Visual Basic必须知道Sheet1,Sheet2等名称.如何将这些与Excel选项卡名称关联起来,以便我不必维护一个随每个新工作表或工作表选项卡重命名而更改的查找表?提前感谢您的回复.

Cha*_*ams 25

在Excel对象模型中,Worksheet有2个不同的名称属性:

Worksheet.Name
Worksheet.CodeName

Name属性是读/写,包含工作表选项卡上显示的名称.它是用户和VBA可更改的

CodeName属性是只读的

可以参考一个特定的片作为工作表("佛瑞德").范围("A1")其中佛瑞德是请将.Name属性或作为Sheet1.Range("A1")其中Sheet 1中是工作表的代号.

  • “CodeName 属性是只读的”:这仅适用于 _** 在运行时**。CodeName 属性_可以_在 VBA 编辑器中设置_**设计时间**_:在 Microsoft Excel 对象列表中选择工作表,然后按 F4 以显示属性。“(名称)”属性 - 带括号 - 是指代号,而“名称” - 属性 - 不带括号 - 是指出现在工作表选项卡上的名称。 (4认同)

小智 5

这将更改所有工作表对象的名称(从 VBA 编辑器的角度)以匹配它们的工作表名称(从 Excel 的角度):

Sub ZZ_Reset_Sheet_CodeNames()
'Changes the internal object name (codename) of each sheet to it's conventional name (based on it's sheet name)

    Dim varItem As Variant

    For Each varItem In ThisWorkbook.VBProject.VBComponents
        'Type 100 is a worksheet
        If varItem.Type = 100 And varItem.Name <> "ThisWorkbook" Then
            varItem.Name = varItem.Properties("Name").Value
        End If
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

重要的是要注意对象名称(代号)“(名称)”被属性名称“名称”覆盖,因此它必须作为子属性引用。