Excel 如何在一张图纸上获得文件中所有图纸的列表?

Excel 如何在一张图纸上获得文件中所有图纸的列表?,excel,vba,excel-formula,Excel,Vba,Excel Formula,有没有办法将所有工作表的名称作为列表查找 我可以通过以下公式找到公式所在图纸的图纸名称: =RIGHT(CELL("filename";A1);LEN(CELL("filename";A1))-SEARCH("]";CELL("filename";A1);1)) 这适用于放置公式的图纸。我怎样才能在一张纸上得到一个文件中所有工作表的列表,比如A1:A5单元格中,如果我有5张工作表 我希望这样,当有人更改工作表名称时,宏将继续工作。创建定义的名称公式,名称管理器:命名:YourSheetName

有没有办法将所有工作表的名称作为列表查找

我可以通过以下公式找到公式所在图纸的图纸名称:

=RIGHT(CELL("filename";A1);LEN(CELL("filename";A1))-SEARCH("]";CELL("filename";A1);1))
这适用于放置公式的图纸。我怎样才能在一张纸上得到一个文件中所有工作表的列表,比如A1:A5单元格中,如果我有5张工作表


我希望这样,当有人更改工作表名称时,宏将继续工作。

创建定义的名称公式,名称管理器:命名:YourSheetNames 在“参考位置”字段中:

=IF(NOW()>0,REPLACE(GET.WORKBOOK(1),1;FIND("]",GET.WORKBOOK(1)),""))
在工作表中,您将其放置在A1:A5:

=INDEX(YourSheetNames,ROW())

只要将“计算”设置为“xlautomatic”,这将为您提供一个实际列表

生成一个定义的名称公式,名称管理器:命名:YourSheetNames 在“参考位置”字段中:

=IF(NOW()>0,REPLACE(GET.WORKBOOK(1),1;FIND("]",GET.WORKBOOK(1)),""))
在工作表中,您将其放置在A1:A5:

=INDEX(YourSheetNames,ROW())
只要将calculation设置为xlautomatic,这将为您提供一个实际列表

VBA函数,如:

Function SheetName(ByVal Index As Long, Optional ByVal Book as Range) as String
    Application.Volatile
    If Book Is Nothing Then Set Book = Application.Caller
    SheetName=Book.Worksheet.Parent.Sheets(Index).Name
End Function
将按索引返回工作表名称,如Excel公式。例如:

=SheetName(1) 'returns "Sheet1"
=SheetName(3) 'returns "Sheet3"
使用另一本书中的可选范围,可以获得其他书页名称:

=SheetName(1, [Some other book.xls]Sheet1!A1) 'returns "Sheet1"
=SheetName(2, [Some other book.xls]Sheet1!A1) 'returns "Sheet2"
VBA函数类似于:

Function SheetName(ByVal Index As Long, Optional ByVal Book as Range) as String
    Application.Volatile
    If Book Is Nothing Then Set Book = Application.Caller
    SheetName=Book.Worksheet.Parent.Sheets(Index).Name
End Function
将按索引返回工作表名称,如Excel公式。例如:

=SheetName(1) 'returns "Sheet1"
=SheetName(3) 'returns "Sheet3"
使用另一本书中的可选范围,可以获得其他书页名称:

=SheetName(1, [Some other book.xls]Sheet1!A1) 'returns "Sheet1"
=SheetName(2, [Some other book.xls]Sheet1!A1) 'returns "Sheet2"

顺便说一句,在vba中,您可以按名称或对象引用工作表。请参见下文,如果使用第一种方法引用工作表,它将始终使用任何名称。
顺便说一句,在vba中,您可以按名称或对象引用工作表。请参见下文,如果使用第一种方法引用工作表,它将始终使用任何名称。

@Misha Urlings,使用以下代码,您可以在消息框中以消息的形式获得以下信息:

图纸名称 板材位置

Option Explicit

Sub test()

Dim ws As Worksheet
Dim str As String

For Each ws In ThisWorkbook.Worksheets
    str = str & vbNewLine & "Sheet named " & ws.Name & " located in position " & ws.Index & "."
Next

'Get the names in a list in message box
MsgBox str

End Sub

@使用以下代码在消息框中以消息形式显示URL,如下所示:

图纸名称 板材位置

Option Explicit

Sub test()

Dim ws As Worksheet
Dim str As String

For Each ws In ThisWorkbook.Worksheets
    str = str & vbNewLine & "Sheet named " & ws.Name & " located in position " & ws.Index & "."
Next

'Get the names in a list in message box
MsgBox str

End Sub

我会保留一张非常隐藏的表格,上面有你引用每张表格时使用的公式

当工作簿\新闻表事件触发指向新工作表的公式时,将创建:

创建一个工作表,并将其命名为shtNames。 为图纸指定图纸名称的选项卡名称。 在shtNames的A1单元格中添加一个标题,我刚刚使用了工作表列表。 在2-XLSHEETPERYHIDDEN可见的图纸属性中更改。 仅当至少剩下一张可见图纸时,才能执行此操作。 将以下代码添加到ThisWorkbook模块: 在名称管理器中创建命名范围:

我把它叫做SheetList。 使用以下公式: =姓名$A$2:INDEXSheetNames$A:$A,COUNTASheetNames$A:$A 然后可以使用SheetList作为数据验证列表和列表控件的源

有两个潜在的问题我还没有研究过,那就是重新排列工作表和删除工作表

因此,当有人更改图纸名称时,宏将继续工作


正如@SNicolaou所说的那样-使用用户无法更改的工作表代码名,无论工作表选项卡名称如何,您的代码都将继续工作。

我将保留一个非常隐藏的工作表,其中包含引用每个工作表时使用的公式

当工作簿\新闻表事件触发指向新工作表的公式时,将创建:

创建一个工作表,并将其命名为shtNames。 为图纸指定图纸名称的选项卡名称。 在shtNames的A1单元格中添加一个标题,我刚刚使用了工作表列表。 在2-XLSHEETPERYHIDDEN可见的图纸属性中更改。 仅当至少剩下一张可见图纸时,才能执行此操作。 将以下代码添加到ThisWorkbook模块: 在名称管理器中创建命名范围:

我把它叫做SheetList。 使用以下公式: =姓名$A$2:INDEXSheetNames$A:$A,COUNTASheetNames$A:$A 然后可以使用SheetList作为数据验证列表和列表控件的源

有两个潜在的问题我还没有研究过,那就是重新排列工作表和删除工作表

因此,当有人更改图纸名称时,宏将继续工作


正如@SNicolaou所说的那样-使用用户无法更改的工作表代码名,无论工作表选项卡名称如何,您的代码都将继续工作。

据我所知,此函数将在单元格中正确给出工作表名称,但如果用户在工作表名称中进行更改,则不会在单元格中动态反映。但是,如果在单元格中再次输入该函数,它将给出更改后的工作表名称。OP需要动态的东西。这只与Excel重新计算算法有关。当重新计算发生时,单元格更改,书本打开,手动计算。。。单元格得到更新。无论如何,添加了Application.Volatile,它通知Excel此函数返回愿意更改。您的澄清增强了我对此事的理解。非常感谢。据我所知,此函数将正确地在单元格中指定工作表名称,但如果用户在工作表名称中进行了更改,则不会在单元格中动态反映。但是,如果在中再次输入该函数
该单元格将给出更改后的工作表名称。OP需要动态的东西。这只与Excel重新计算算法有关。当重新计算发生时,单元格更改,书本打开,手动计算。。。单元格得到更新。无论如何,添加了Application.Volatile,它通知Excel此函数返回愿意更改。您的澄清增强了我对此事的理解。非常感谢。这张表列出了所有的工作表名称,但如果工作表名称发生更改,则没有链接。我想保留一个链接,因为我的文件需要它。谢谢你的帮助,如果你知道另一种方法,告诉我!更改了我的答案,对于动态解决方案,此解决方案列出了所有图纸名称,但如果图纸名称更改,则没有链接。我想保留一个链接,因为我的文件需要它。谢谢你的帮助,如果你知道另一种方法,告诉我!更改了我的答案,对于动态解决方案是的,这称为工作表的代码名,当用户更改工作表的名称时,它不会更改。以下是有关引用工作表的更多信息,请将其添加到此中-如果用户复制带有代码名的工作表,并且您希望您的示例工作簿\u SheetChange对其起作用,您只需选中LeftSh.CodeName,8=abcdefgh:将复制该代码名,并使用自动递增的整数对其进行后期修复。即,复制abcdefgh将导致下一张代码为abcdefgh1的纸张。这是目前为止在Excel VBA程序中处理多种工作表类型最可靠的方法。是的,这称为工作表的代码名,当用户更改工作表的名称时,它不会更改。以下是有关引用工作表的更多信息,请将其添加到此中-如果用户复制带有代码名的工作表,并且您希望您的示例工作簿\u SheetChange对其起作用,您只需选中LeftSh.CodeName,8=abcdefgh:将复制该代码名,并使用自动递增的整数对其进行后期修复。即,复制abcdefgh将导致下一张代码为abcdefgh1的纸张。这是迄今为止在Excel VBA程序中处理多种图纸类型最可靠的方法。