列出Excel工作表和图表标签

这列出超链接,所有表格,然后是所有图表。 我希望列表按照在工作簿中的顺序排列。 即sheet1,sheet2,chart1,sheet3,图表2等,我有126个选项卡,所以手动重新sorting不是一个选项。

我确定有一种方法可以使用IF / OR,但我不知道如何去做THEN。

Sub CreateLinksToAll() Dim sh As Worksheet Dim ch As Chart Application.ScreenUpdating = False Sheets("Index").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select For Each sh In ActiveWorkbook.Worksheets If ActiveSheet.Name <> sh.Name And sh.Visible Then ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ "'" & sh.Name & "'" & "!A1", TextToDisplay:=sh.Name ActiveCell.Offset(1, 0).Select End If Next sh For Each ch In ActiveWorkbook.Charts If ActiveSheet.Name <> ch.Name And ch.Visible Then ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ "'" & ch.Name & "'" & "!A1", TextToDisplay:=ch.Name ActiveCell.Offset(1, 0).Select End If Next ch Columns("A:A").Font.Size = 12 Range("A1").Select End Sub 

你首先得到所有的工作表,然后是图表,因为你要对每个集合进行两次迭代。

相反,遍历工作簿的.Sheets集合。

从我原来的答案修改 :您不需要任何条件testing的图表/图表在这种方法。 这是未经testing,但我认为它应该工作,让我知道如果它不(可能会丢失一个圆括号…)。

 Sub Test() Dim sh As Variant Dim rng as Range Dim r as Integer Application.ScreenUpdating = False Set rng = Sheets("Index").Range("A2", Range("A2").End(xlDown)) rng.ClearContents Set rng = rng.Resize(1,1) For Each sh In ActiveWorkbook.Sheets r = r + 1 rng.Cells(r).Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ "'" & sh.Name & "'" & "!A1", TextToDisplay:=sh.Name Next Application.ScreenUpdating = True End Sub 

我希望列表按照在工作簿中的顺序排列。 即sheet1,sheet2,chart1,sheet3,chart2等

为此使用一个简单的For循环

 For i = 1 To ThisWorkbook.Sheets.Count Debug.Print ThisWorkbook.Sheets(i).Name Next 

在这里,我只是按照他们在工作簿中的顺序显示工作表的名称。 简单地把你的超链接代码,而不是。

编辑

另外你可能会发现这个有趣的:)