我需要获取工作表的代号(第一个),然后我可以检查它的名称
I need to get the CODENAME (first) of a Worksheet so then I can check its NAME
我有一个包含 6 个作业的工作簿sheet。
想象一下“Alpha”、“Beta”、“Gama”、“Delta”、“Epsilon”、“Zeta”。
按此顺序,它们的索引为 Alpha= 1 - Beta = 2... Zeta = 6
但是,如果我将 Alpha 移动到 Beta 之后的位置,索引号也会改变,所以我不应该通过索引号来引用 WS。
现在,如果用户更改 Worksheet NAME,代码(如果通过 worksheet NAME 设置 WS)也将失败。
唯一不能由用户“正常”更改的是 sheets CODE.NAME.
再次...
代号“Sheet1”- 名称“Alpha”- 索引“1”
代号“Sheet2”- 名称“Beta”- 索引“2”
代号“Sheet3”- 名称“Gama”- 索引“3”
...等等。
即使我更改 sheet 的位置(索引)或 sheet 的名称,如果我通过他们的 CODE.NAME 引用他们,也没关系他们位于什么位置或他们的名字是什么。
所以,我只想找到 Sheet 的名字,使用它的 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中sheet的名称(“ALPHA”)。如果用户更改了该名称,它应该仍然有效,并存储新名称。我必须首先通过 CODE.NAME(不可更改)获得 sheet,然后我才能检查它的名称。
(*) 我试过了...
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”,...它创建工作sheets 作为“ Planilha1”、“Planilha2”、“Planilha3”...这些“Planilhas”的名称可以随意命名...
看这张图片:
突出显示 sheet 的 CODE.NAME 是“Planilha5”,名称是“心脏变量”。我需要在 table(在另一项工作sheet)中找到“心脏变量”,以获取该 table 中的行号,其中所有对这项工作的引用sheet被存储。如果我在工作 sheet 名称所在的 table 列中进行简单查找,并搜索“心脏变量”,它就可以正常工作。
看,我在第 15 行找到了我要查找的内容(“心脏变量”)!
但是如果用户更改作品sheet NAME...
回到第一张图。看右边的代码。 (HEALTHY 以前是 DIM 作为 ThisWorkbook)有一个条目说 ESTAABA =“Cardiac variables”,然后我将 WS3 设置为 ESTAABA 的内容(我可以直接完成......)。但我不想在代码中保留工作 sheet 的名称,因为如果用户更改 TAB 名称(如上例所示,从“Cardiac variables”更改为“Cardio VAR”)它不会工作了。
但是,如果我在之前的 table 中查找“Planilha5”出现的地方,一切都会好起来的,无论用户想要在工作中使用什么名称sheet。
问题是我无法将 WS3 设置为被理解为 Planilha5 作品sheet。如果我说 Set WS3 = HEALTHY.Sheets("Cardiac variables") 它有效。如果我说 Set WS3 = HEALTHY.Planilha5, or = Planilha5, or = Sheets(Planilha5) 它不起作用。
在简历中,我不想在我的代码中的任何地方使用“心脏变量”(或工作的其他名称sheets - 名称可以更改...)。
我想将 WS3 设置为 Planilha5 作品sheet。
忘记参考“心脏变量”,忘记作品sheet索引号,因为用户可以更改名称,他也可以改变作品sheet的位置(通过移动或addin/removing 前作sheets).
感谢您的耐心等待!
我不确定我是否正确理解了你的问题。但根据我的理解,这是你想要的。
在 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
然后您可以在需要引用任何 sheet.
时轻松调用此函数
例如
'-- test function
Sub Test()
Dim ws As Worksheet
Set ws = GetSheetByCodeName("Sheet1")
MsgBox ws.CodeName & " ----- " & ws.Name
End Sub
这就是你所看到的...
我有一个包含 6 个作业的工作簿sheet。
想象一下“Alpha”、“Beta”、“Gama”、“Delta”、“Epsilon”、“Zeta”。
按此顺序,它们的索引为 Alpha= 1 - Beta = 2... Zeta = 6
但是,如果我将 Alpha 移动到 Beta 之后的位置,索引号也会改变,所以我不应该通过索引号来引用 WS。 现在,如果用户更改 Worksheet NAME,代码(如果通过 worksheet NAME 设置 WS)也将失败。 唯一不能由用户“正常”更改的是 sheets CODE.NAME.
再次... 代号“Sheet1”- 名称“Alpha”- 索引“1”
代号“Sheet2”- 名称“Beta”- 索引“2”
代号“Sheet3”- 名称“Gama”- 索引“3” ...等等。
即使我更改 sheet 的位置(索引)或 sheet 的名称,如果我通过他们的 CODE.NAME 引用他们,也没关系他们位于什么位置或他们的名字是什么。
所以,我只想找到 Sheet 的名字,使用它的 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中sheet的名称(“ALPHA”)。如果用户更改了该名称,它应该仍然有效,并存储新名称。我必须首先通过 CODE.NAME(不可更改)获得 sheet,然后我才能检查它的名称。
(*) 我试过了...
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”,...它创建工作sheets 作为“ Planilha1”、“Planilha2”、“Planilha3”...这些“Planilhas”的名称可以随意命名...
看这张图片:
突出显示 sheet 的 CODE.NAME 是“Planilha5”,名称是“心脏变量”。我需要在 table(在另一项工作sheet)中找到“心脏变量”,以获取该 table 中的行号,其中所有对这项工作的引用sheet被存储。如果我在工作 sheet 名称所在的 table 列中进行简单查找,并搜索“心脏变量”,它就可以正常工作。
看,我在第 15 行找到了我要查找的内容(“心脏变量”)!
但是如果用户更改作品sheet NAME...
回到第一张图。看右边的代码。 (HEALTHY 以前是 DIM 作为 ThisWorkbook)有一个条目说 ESTAABA =“Cardiac variables”,然后我将 WS3 设置为 ESTAABA 的内容(我可以直接完成......)。但我不想在代码中保留工作 sheet 的名称,因为如果用户更改 TAB 名称(如上例所示,从“Cardiac variables”更改为“Cardio VAR”)它不会工作了。
但是,如果我在之前的 table 中查找“Planilha5”出现的地方,一切都会好起来的,无论用户想要在工作中使用什么名称sheet。
问题是我无法将 WS3 设置为被理解为 Planilha5 作品sheet。如果我说 Set WS3 = HEALTHY.Sheets("Cardiac variables") 它有效。如果我说 Set WS3 = HEALTHY.Planilha5, or = Planilha5, or = Sheets(Planilha5) 它不起作用。
在简历中,我不想在我的代码中的任何地方使用“心脏变量”(或工作的其他名称sheets - 名称可以更改...)。
我想将 WS3 设置为 Planilha5 作品sheet。 忘记参考“心脏变量”,忘记作品sheet索引号,因为用户可以更改名称,他也可以改变作品sheet的位置(通过移动或addin/removing 前作sheets).
感谢您的耐心等待!
我不确定我是否正确理解了你的问题。但根据我的理解,这是你想要的。
在 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
然后您可以在需要引用任何 sheet.
时轻松调用此函数例如
'-- test function
Sub Test()
Dim ws As Worksheet
Set ws = GetSheetByCodeName("Sheet1")
MsgBox ws.CodeName & " ----- " & ws.Name
End Sub
这就是你所看到的...