我需要获取工作表的CODENAME第一个,然后才能检查其名称

问题描述

我有一个包含6个工作表的工作簿。

想象一下“ Alpha”,“ Beta”,“ Gama”,“ Delta”,“ Epsilon”,“ Zeta”。

按此顺序,它们的索引为Alpha = 1-Beta = 2 ... Zeta = 6

但是,如果我将Alpha移至Beta之后的位置,索引号也会更改,因此我不应该通过其索引号来引用WS。 现在,如果用户更改工作表名称,则代码-如果通过工作表名称设置WS-也将失败。 用户唯一不能“正常”更改的是工作表CODE.NAME。

再次... 代号“ Sheet1”-名称“ Alpha”-索引“ 1”

代号“ Sheet2”-名称“ Beta”-索引“ 2”

代号“ Sheet3”-名称“ Gama”-索引“ 3” ...等等。

即使我更改工作表的位置(索引)或工作表的名称,也可以通过其CODE.NAME来引用它们,无论它们位于什么位置或它们的名字都没关系。

所以,我想要的是拿起工作表的名称,使用它的CODE.NAME到达那里... 像这样:

Dim WB1 as Workbook
Dim WS1 as Worksheet
Dim WSNAME as String
Set WB1 = ThisWorkbook
Set WS1 = (here I need code to pick the "Sheet1" worksheet to variable WS1) (*)

WSNAME = WS1.Name

注意:最终结果应在表WS1中存储表的名称(“ ALPHA”)。如果用户更改了该名称,它仍然可以工作,并存储新名称。我必须先通过它的CODE.NAME(不可更改)来获取工作表,然后才能检查其名称

(*)我已经尝试过...

Set WS1 = WB1.Sheet1
Set WS1 = WB1.Sheet1.CodeName
Set WS1 = WB1.Sheets(Sheet1)
Set WS1 = WB1.Sheets("Sheet1").CodeName

什么都没有...

但是如果我使用

Set WS1 = WB1.Sheets("ALPHA").CodeName

它可以工作,但是然后我遇到了同样的问题...如果用户将“ ALPHA”更改为“ ALFA”,一切都会停止工作...

任何帮助将不胜感激。 预先感谢!

-编辑以添加图像-------------------------------------

我的Excel是葡萄牙语,所以它不是“ Sheet1”,“ Sheet2”,而是创建工作表为“ Planilha1”,“ Planilha2”,“ Planilha3” ...,而这些“ Planilhas”的命名方式为用户想要...

看这张图片

enter image description here

突出显示的工作表的CODE.NAME是“ Planilha5”,而NAME是“心脏变量”。我需要在一个表(在另一个工作表中)中找到“心脏变量”,以获取该表中的行号,该工作表的所有引用都存储在该表中。如果我在工作表名称所在的表的列中进行简单查找,然后搜索“心脏变量”,则可以。

enter image description here

看,我在第15行找到了我要寻找的东西(“心脏变量”)!

enter image description here

但是,如果用户更改了工作表名称...

返回第一张图像。查看右侧的代码。 (HEALTHY以前是DIM的ThisWorkbook)。有一个条目说ESTAABA =“心脏变量”,然后我将WS3设置为ESTAABA的内容(我可以直接做...)。但是我不想在代码中保留工作表的名称,因为如果用户将TAB名称(如上面的示例从“心脏变量”更改为“心脏变量”),将不再起作用。

但是,如果我在上表中查找“ Planilha5”的位置,则无论用户要在工作表中使用哪个名称,都可以。

问题是我无法将WS3设置为Planilha5工作表。如果我说Set WS3 = HEALTHY.Sheets(“心脏变量”),它可以工作。如果我说Set WS3 = HEALTHY.Planilha5或= Planilha5或= Sheets(Planilha5),则不起作用。

在简历中,我不想在代码的任何地方使用“心脏变量”(或工作表的其他名称-可以更改名称...)。

我想将WS3设置为Planilha5工作表。 忘记引用“心脏变量”,而忘记工作表索引号,因为用户可以更改名称,他还可以更改工作表的位置(通过移动或添加/删除以前的工作表)。

感谢您的耐心!

解决方法

我不确定我能否正确回答您的问题。但是根据我的理解,这就是您想要的。

Module

中添加此功能
Function GetSheetByCodeName(ByVal CodeName As String) As Worksheet
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.CodeName = CodeName Then
            Set GetSheetByCodeName = ws
            Exit Function
        End If
    Next
End Function

然后您可以在需要参考任何工作表时轻松调用此函数。

例如

'-- test function
Sub Test()
    Dim ws As Worksheet
    Set ws = GetSheetByCodeName("Sheet1")
    MsgBox ws.CodeName & " -----  " & ws.Name
End Sub

这就是您所看到的...

sheet by codename

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...