Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我需要得到一个工作表的代码名(第一),这样我就可以检查它的名称_Excel_Vba_Worksheet - Fatal编程技术网

Excel 我需要得到一个工作表的代码名(第一),这样我就可以检查它的名称

Excel 我需要得到一个工作表的代码名(第一),这样我就可以检查它的名称,excel,vba,worksheet,Excel,Vba,Worksheet,我有一本有6张工作表的工作簿 想象一下“Alpha”、“Beta”、“Gama”、“Delta”、“Epsilon”、“Zeta” 按此顺序,它们的索引为Alpha=1-Beta=2。。。泽塔=6 但是,如果我将Alpha移动到Beta之后的位置,索引号也会改变,因此我不应该通过它们的索引号来引用WS。 现在,如果用户更改了工作表名称,那么代码(如果通过工作表名称设置WS)也将失败。 用户唯一不能“正常”更改的是sheets CODE.NAME 再次。。。 代号“Sheet1”-名称“Alpha

我有一本有6张工作表的工作簿

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

按此顺序,它们的索引为Alpha=1-Beta=2。。。泽塔=6

但是,如果我将Alpha移动到Beta之后的位置,索引号也会改变,因此我不应该通过它们的索引号来引用WS。 现在,如果用户更改了工作表名称,那么代码(如果通过工作表名称设置WS)也将失败。 用户唯一不能“正常”更改的是sheets 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”,名称为“心脏变量”。我需要在一个表(另一个工作表)中找到“心脏变量”,以获取该表中的行号,该表中存储了该工作表的所有引用。如果我在工作表名称所在的表格列中进行简单的查找,并搜索“心脏变量”,它将正常工作

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

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

回到第一张图片。看右边的代码。(Health之前与此工作簿一样黯淡)有一个条目写着ESTAABA=“心脏变量”,然后我将WS3设置为ESTAABA的内容(我可以直接完成…)。但我不想在代码中保留工作表的名称,因为如果用户更改选项卡名称(如上面的示例所示,从“心脏变量”更改为“心脏变量”),它将不再工作

但是,如果我在前面的表中查找,其中出现了“Planilha5”,那么无论用户希望在工作表中使用什么名称,一切都可以

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

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

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


谢谢你的耐心

我不确定我是否正确理解了你的问题。但根据我的理解,这是你想要的

模块中添加此功能

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
然后,您可以在需要引用任何工作表时轻松调用此函数

e、 g

这就是你看到的


我不确定我是否正确理解了你的问题。但根据我的理解,这是你想要的

模块中添加此功能

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
然后,您可以在需要引用任何工作表时轻松调用此函数

e、 g

这就是你看到的



Set ws1=Sheet1
。只能在运行代码的工作簿中引用工作表的代码名,因此不允许使用工作簿引用。要实现此目的,您需要稍微不同的方法。。。。稍等片刻发布答案。
Set WS3=Planilha5
将起作用。这就是本的建议above@BigBen:是的,这看起来是最好的选择。正在等待他确认我上面的最后一条评论…
Set ws1=Sheet1
。只能在运行代码的工作簿中引用工作表的代码名,因此不允许使用工作簿引用。要实现此目的,您需要一种稍微不同的方法。。。。稍等片刻发布答案。
Set WS3=Planilha5
将起作用。这就是本的建议above@BigBen:是的,这看起来是最好的选择。正在等他确认我上面的最后一句话…>答对了这个很有魅力!谢谢Pradeep,我真的很生气,呵呵……这太过分了。如果它在
本工作簿中
,则只需使用
表1
。这是双重的。@BigBen,我对这个问题的解释和你对它的解释略有不同。我认为“Sheet1”存储为一个字符串,我假设这是从
Set WS1=(这里我需要代码将“Sheet1”工作表选择为变量WS1)(*)
似乎我是正确的,因为上面的注释中提到了
>宾果!<这个很有魅力。不过,如果你不同意,可以随意否决(如果你还没有这样做)。当你设置ws3=Planilha5时会发生什么?错误消息是什么?这正是你应该如何使用代码名