我正在阅读一些使用宏来自动创建目录的代码。我有一张包含多张床单的工作簿,每天都会添加新的床单。每个工作表名称都是唯一编号,并且内部具有相同的模板。
我看到的代码只能选择使用工作表名称整理索引。
我想知道我是否可以获得一个也可以从每张纸中获取一个或两个值的选项,如下所示:
Sr No. Sheet Name Cell A1 Cell A2 Cell A3
每次打开索引表并且工作表超链接到工作表时,我都需要运行宏。
有什么想法吗?
提前感谢您的帮助!
答案 0 :(得分:2)
此代码基于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
答案 1 :(得分:0)
我没有VBA这样做。这将创建一个自填充索引表,从每个工作表中提取信息。
在New Name
中创建名为 wshNames 的Name Manager
,其值为:=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
创建目录工作表,将其移至工作簿中最左侧的标签(即位置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公式。 More on this here - 请注意,您仍需要另存为.xlsm。这项技术来自David Hager,来自this。