Excel索引/目录 – macros
我正在读一些使用macros来自动创build目录的代码。 我有一个工作簿与多个工作表,每天都在添加新工作表。 每个工作表名称是一个唯一的编号,里面有相同的模板。
我看到的代码只会给出一个索引与工作表名称的选项。
我想知道如果我能得到一个选项,也将从每张表中select一个或两个值,如下所示:
Sr编号表格名称单元格A1单元格A2单元格A3
每次打开“索引”表单并将“表单名称”列超链接到工作表时,我都需要运行“macros”。
有任何想法吗?
提前感谢任何帮助!
这个代码基于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这样做。 这将创build一个自填充索引表,从每个工作表中获取信息。
-
在
Name Manager
创build一个名为wshNames的New Name
,其值为:=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
-
创build一个内容工作表,将其移动到工作簿中最左边的选项卡(即位置1)。
-
插入一个新的数据表。
-
在第一列input数字1-50(或足够覆盖您将使用的工作表的最大数量)。 这些将是您的工作表索引ID。
-
在第2列中,我们将使用公式自动填充工作表名称。 如果第一个工作表ID号(1)在单元格
B5
,请使用此。RAND()*0
保持公式不稳定,并强制Excel在任何更改时刷新它。=IFERROR(INDEX(wshNames,1+B5+RAND()*0),"")
-
您可以使用此公式在下一列中检索每个工作表中的数据:
=IFERROR(INDIRECT("'"&C5&"'!C2"),"")
,其中C2是要从目标工作表中获取的单元格, C5是第2栏中的工作表名称。 -
如果你想input一个超链接来跳转到工作表,请在第4列中使用:
=IF([@[Your Column 2 Heading]]="","",HYPERLINK("#'" & C5 & "'!A1", [@[Your Column 2 Heading]]))
。 你可以调整这个,因为你需要它来显示不同的链接文字。 -
重复此公式多次,因为您需要从工作表中添加更多的数据。
-
可选:添加条件格式来隐藏未使用的行。
注意 :步骤1依赖于XLM公式。 更多关于这里 – 请注意,您仍然需要保存为.xlsm。 这个技巧是从David Hager借来的。