提问人:Hellihansen 提问时间:11/16/2023 更新时间:11/16/2023 访问量:95
如何获取另一个工作表中的所有工作表名称(添加新工作表名称时自动更新)
How to get all sheet names in another sheet (automatic update when add new sheetnames)
答:
1赞
Solar Mike
11/16/2023
#1
这是一个简单的方法,但基于每个工作表的命名,如您的示例“sheetXX”:
在每张纸上,单元格 B1 中都有以下内容:
CELL("filename",A1)
你可以把它放在其他地方或隐藏它,将其格式化为白色等
因此,使用 mid() 仅获取工作表名称:
MID(INDIRECT("Sheet"&ROW()&"!B$1"),FIND("]",INDIRECT("Sheet"&ROW()&"!B$1"),1)+1,20)
评论
0赞
Mayukh Bhattacharya
11/16/2023
先生,由于只需要工作表名称,您能否在公式之前添加以仅获取所需的名称,否则它会显示桌面的完整文件路径TEXTAFTER(your_formula,"]")
0赞
Solar Mike
11/16/2023
@MayukhBhattacharya这就是为什么我用 mid() 显示版本来获取名称的原因 - 没有使用 textafter(),因为这在许多版本的 Excel 中并不常见,并且 OP 没有明确说明正在使用哪个版本,所以我构建了它以更广泛地使用。Textafter()、Textbefore()、split() 等非常有用,但:)
0赞
Mayukh Bhattacharya
11/16/2023
啊,好吧,明白了!
0赞
Solar Mike
11/16/2023
@MayukhBhattacharya我喜欢你的风格,干杯。
1赞
Ron Rosenfeld
11/16/2023
#2
使用 VBA:
- 在您希望获得结果的工作表上
_ 右键单击底部的工作表选项卡
- 选择
View Code
- 将下面的代码粘贴到打开的窗口中
- 选择
- 每当您选择该工作表时,该列表都会更新
- 请注意,当您添加或删除工作表时,该工作表将变为活动状态,并且当您重新选择显示该列表的工作表时,更改将反映在您的列表中。
- 如果需要,可以添加例程对列表进行排序,和/或排除包含列表的工作表名;或省略代号(实际上仅在 VBA 中有用)
Option Explicit
Private Sub Worksheet_Activate()
Dim WS As Worksheet
Dim V() As Variant
Dim I As Long
With ThisWorkbook
ReDim V(0 To .Worksheets.Count, 1 To 2)
V(0, 1) = "Sheet Name"
V(0, 2) = "Code Name"
I = 0
For Each WS In .Worksheets
I = I + 1
V(I, 1) = WS.Name
V(I, 2) = WS.CodeName
Next WS
End With
With Cells(1, 1).Resize(rowsize:=UBound(V, 1) + 1, columnsize:=UBound(V, 2))
.EntireColumn.ClearContents
.Value = V
'Can omit the next line
'The Style name might be different if your Excel is not English
.Style = "Output"
.EntireColumn.AutoFit
End With
End Sub
评论
Excel Formula
Excel 4.0
VBA
Power Query
Excel 4.0
SHEETNAMES
=REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
=INDEX(SHEETNAMES, ROWS(A$1:A1))
SHEETNAMES
=TEXTAFTER(GET.WORKBOOK(1),"]")
INDEX()
=TOCOL(SHEETNAMES)