如何解决我需要获取工作表的CODENAME第一个,然后才能检查其名称
想象一下“ 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”的命名方式为用户想要...
看这张图片:
突出显示的工作表的CODE.NAME是“ Planilha5”,而NAME是“心脏变量”。我需要在一个表(在另一个工作表中)中找到“心脏变量”,以获取该表中的行号,该工作表的所有引用都存储在该表中。如果我在工作表名称所在的表的列中进行简单查找,然后搜索“心脏变量”,则可以。
看,我在第15行找到了我要寻找的东西(“心脏变量”)!
返回第一张图像。查看右侧的代码。 (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
这就是您所看到的...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。