是否可以找到所有工作表的名称作为列表?
我可以通过以下公式找到放置该公式的工作表的工作表名称:
=RIGHT(CELL("filename";A1);LEN(CELL("filename";A1))-SEARCH("]";CELL("filename";A1);1))
此方法适用于公式所在的工作表。如何获得一张工作表中文件中所有工作表的列表(如果我有5张工作表,请在A1:A5单元格中说)?
我想这样做,以便当有人更改工作表名称时,宏保持正常工作。
答案 0 :(得分:3)
答案 1 :(得分:1)
我会保留一个非常隐藏的工作表,其中包含您引用每个工作表所使用的公式。
当Workbook_NewSheet
事件触发时,将创建一个指向新工作表的公式:
shtNames
的代号。
SheetNames
。A1
的单元格shtNames
中添加标题(我刚刚使用了“ Sheet List”)。 ThisWorkbook
模块中:Private Sub Workbook_NewSheet(ByVal Sh As Object)
With shtNames
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).Formula = _
"=RIGHT(CELL(""filename"",'" & Sh.Name & "'!$A$1), " & _
"LEN(CELL(""filename"",'" & Sh.Name & "'!$A$1))-" & _
"FIND(""]"",CELL(""filename"",'" & Sh.Name & "'!$A$1),1))"
End With
End Sub
在名称管理器中创建一个命名范围:
SheetList
。 =SheetNames!$A$2:INDEX(SheetNames!$A:$A,COUNTA(SheetNames!$A:$A))
然后,您可以将SheetList
用作数据验证列表和列表控件的来源。
我尚未研究的两个潜在问题是重新排列工作表和删除工作表。
因此,当有人更改工作表名称时,宏将继续工作
正如@SNicolaou所说-使用用户无法更改的工作表代码名称,无论工作表标签名称如何,您的代码都将继续工作。
答案 2 :(得分:0)
进行定义的名称(公式,名称管理器):命名:YourSheetNames 在该字段中是指您放置的位置:
=IF(NOW()>0,REPLACE(GET.WORKBOOK(1),1;FIND("]",GET.WORKBOOK(1)),""))
在工作表中,您放置在A1:A5中:
=INDEX(YourSheetNames,ROW())
这会给您(只要将计算设置为xlautomatic)实际列表
答案 3 :(得分:0)
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"
答案 4 :(得分:0)
@Mischa 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