Список вкладок Excel и диаграмм

Это списки и гиперссылки, все листы, а затем все диаграммы. Я бы хотел, чтобы список был в том порядке, в котором они находятся в рабочей книге; т.е. sheet1, sheet2, chart1, sheet3, chart 2 и т. д. У меня есть 126 вкладок, поэтому ручной перебор не является вариантом.

Я уверен, что есть способ использовать 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 коллекцию « .Sheets книги».

Модифицировано из моего первоначального ответа : вам не нужен какой-либо условный тест для Sheet / Chart в этом подходе. Это непроверено, но я думаю, что это должно сработать, дайте мне знать, если это не так (возможно, где-то отсутствует скобка).

 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, chart 2 и т. д.

Для этого используйте простой для цикла

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

Здесь я просто показываю имена листов в том порядке, в котором они содержатся в книге. Вместо этого вместо этого укажите свой гиперссылки.

РЕДАКТИРОВАТЬ

Также вы можете найти ЭТО интересное 🙂

Interesting Posts
Давайте будем гением компьютера.