我正在阅读一些使用宏自动创建目录的代码。我有一个包含多张工作表的工作簿,并且每天都在添加新工作表。每个工作表名称都是一个唯一编号,并且内部具有相同的模板。
我看到的代码只会提供将索引与工作表名称进行比较的选项。
我想知道我是否可以得到一个选项,它也可以从每张表中提取一个或两个值,如下所示:
Sr 编号 表名称 单元格 A1 单元格 A2 单元格 A3
每次打开索引表并将工作表名称列超链接到工作表时,我都需要运行宏。
有任何想法吗?
提前感谢您的帮助!
多年来,此代码基于http://www.ozgrid.com/VBA/sheet-index.htm。
在修改后的代码中,第 1 列将包含工作表的索引,第 2 列将显示所有工作表的单元格 A2 和 A3 的提取。注意,索引表第 1、2、3 列的旧内容将被彻底清除!!!
Private Sub Worksheet_Activate()
Dim wSheet As Worksheet
Dim i As Long
i = 1
With Me
.Columns(1).ClearContents
.Columns(2).ClearContents
.Columns(3).ClearContents
.Cells(1, 1) = "INDEX"
.Cells(1, 1).Name = "Index"
End With
For Each wSheet In Worksheets
If wSheet.Name <> Me.Name Then
i = i + 1
'
' in the WorkSheet: set up link to return to the index sheet from:
'
With wSheet
.Range("A1").Name = "Start" & wSheet.Index
.Hyperlinks.Add Anchor:=.Range("A1"), Address:="", _
SubAddress:="Index", TextToDisplay:="Back to Index"
End With
'
' in the Index WorkSheet: set up link to go to WorkSheet:
'
Me.Hyperlinks.Add Anchor:=Me.Cells(i, 1), Address:="", _
SubAddress:="Start" & wSheet.Index, _
TextToDisplay:=wSheet.Name
'
Me.Cells(i, 2).Value = wSheet.Range("A2").Value
Me.Cells(i, 3).Value = wSheet.Range("A3").Value
'
End If
Next wSheet
End Sub
我在没有 VBA 的情况下这样做。这将创建一个自填充索引表,从每个工作表中提取信息。
创建一个名为wshNamesNew Name
的in ,其值为:Name Manager
=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
创建一个内容工作表,将其移动到工作簿中最左侧的选项卡(即位置一)。
插入一个新的数据表。
在第一列中输入数字 1-50(或足以覆盖您将使用的最大工作表数)。这些将是您的工作表索引 ID。
在第 2 列中,我们将使用一个公式来自动填充工作表名称。如果第一个工作表 ID 号 (1) 在单元格中B5
,请使用它。RAND()*0
保持公式不稳定并强制 Excel 在任何更改时刷新它。
=IFERROR(INDEX(wshNames,1+B5+RAND()*0),"")
您可以在下一列中使用以下公式从每个工作表中检索数据:=IFERROR(INDIRECT("'"&C5&"'!C2"),"")
,其中 C2 是您要从目标工作表中获取的单元格,C5 是您在第 2 列中获得的工作表名称。
如果要输入超链接以跳转到工作表,请在第 4 列中使用:=IF([@[Your Column 2 Heading]]="","",HYPERLINK("#'" & C5 & "'!A1", [@[Your Column 2 Heading]]))
。您可以根据需要调整它以显示不同的链接文本。
根据需要从工作表中添加更多数据,重复此公式多次。
可选:添加条件格式以隐藏未使用的行。
注意:第 1 步依赖于 XLM 公式。更多信息在这里- 请注意,您仍然需要另存为 .xlsm。这种技术是通过this从David Hager那里借来的。