Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Erweiterung Inhaltsverzeichnis

Erweiterung Inhaltsverzeichnis
25.09.2015 07:53:56
erichm
Hallo,
habe nachstehenden Code, mit dem ich eine Tabelle Inhaltsverzeichnis erstellen lasse und es werden wunderbar alle Tabellen der Datei aufgelistet; nach Nrn. (Spalten A und B) und nach Alphabet (Spalten D und E):
Sub inhaltsverzeichnis_erstellen()
'Inhaltsverzeichnis aller Tabellenblätter
'im erten Tabellenblatt ab Zeile A1 einfügen
Dim Blatt As Object
Dim zeile As Double
Dim NewSheet As Worksheet
Dim i As Integer
zeile = 3
'Fehlerhandling
On Error Resume Next
'Abfrage unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Sheet Inhaltsverzeichnis auf jeden Fall löschen
Sheets("Inhaltsverzeichnis").Delete
'Neues Tabellenblatt mit dem Namen Inhaltsverzeichnis hinzufügen
Set NewSheet = Worksheets.Add
NewSheet.Name = "Inhaltsverzeichnis"
Sheets("Inhaltsverzeichnis").Move Before:=Sheets(1) ' = Tabellenblatt als erstes
'Überschrift Einfügen und formatieren
With Sheets("Inhaltsverzeichnis").Range("A1")
.Value = "Inhaltsverzeichnis"
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(1, 2)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(1, 3)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(2, 1)
.Value = "sortiert nach Blatt-Nr."
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(2, 5)
.Value = "alphabetisch sortiert"
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
'Laufende Blattnummerierung + Blattname einfügen
For Each Blatt In Sheets
Sheets("Inhaltsverzeichnis").Cells(zeile, 1).Value = "Blatt " & zeile - 2
Sheets("Inhaltsverzeichnis").Cells(zeile, 2).Value = Blatt.Name
Sheets("Inhaltsverzeichnis").Hyperlinks.Add Anchor:=Cells(zeile, 2), Address:="",  _
SubAddress:="'" & _
Blatt.Name & "'!A1", TextToDisplay:=Blatt.Name
zeile = zeile + 1
Next Blatt
ActiveSheet.Columns("B:B").EntireColumn.AutoFit
'Kopiere die zwei erstellten Spalten und sortiere Hyperlinks
Range("A3", Range("B65536").End(xlUp)).Select
Selection.Copy
Range("D3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("D3", Range("E65536").End(xlUp)).Select
Selection.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveSheet.Columns("D:E").EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
Range("A3").Select
ActiveWindow.FreezePanes = True
Cells(1, 4).Value = "Diese Datei hat  " & Worksheets.Count & "  Tabellen"
'Userform ausblenden
'frmInhaltsverz.Hide
'Ursprungszustand wieder herstellen
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Jetzt würde ich gerne folgende Erweiterung einbauen:
In Spalte F soll in der jeweiligen Zeile die letzte aktive Zelle der Tabelle gem. Spalte E eingetragen werden. Die Ermittlung dieser Zelle würde mit
Sub leZelle()
MsgBox "Die neue letzte Zelle besitzt die Adresse " & _
Cells.SpecialCells(xlLastCell).Address(False, False) & ".", vbInformation
End Sub

funktionieren.
So sollte dies aussehen:
https://www.herber.de/bbs/user/100386.xlsx
Besten Dank für eine Hilfe.
mfg

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erweiterung Inhaltsverzeichnis
26.09.2015 11:29:48
Werner
Hallo Erich,
ich habe auf deiner Tabelle Inhaltsverzeichnis eine weitere Spalte (Spalte C) eingefügt. Da schreibe ich über das Makro die letzte benutzte Zelle des jeweiligen Tabellenblattes rein. Anschließend wird die Spalte dann durch das Makro ausgeblendet. Über diesen Umweg sind die entsprechenden Daten vor dem Kopieren in den zweiten Bereich und dem anschließenden Sortieren schon vorhanden.
Probiers mal aus.
Sub inhaltsverzeichnis_erstellen()
'Inhaltsverzeichnis aller Tabellenblätter
'im erten Tabellenblatt ab Zeile A1 einfügen
Dim Blatt As Object
Dim zeile As Double
Dim NewSheet As Worksheet
Dim i As Integer
zeile = 3
'Fehlerhandling
On Error Resume Next
'Abfrage unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Sheet Inhaltsverzeichnis auf jeden Fall löschen
Sheets("Inhaltsverzeichnis").Delete
'Neues Tabellenblatt mit dem Namen Inhaltsverzeichnis hinzufügen
Set NewSheet = Worksheets.Add
NewSheet.Name = "Inhaltsverzeichnis"
Sheets("Inhaltsverzeichnis").Move Before:=Sheets(1) ' = Tabellenblatt als erstes
'Überschrift Einfügen und formatieren
With Sheets("Inhaltsverzeichnis").Range("A1")
.Value = "Inhaltsverzeichnis"
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(1, 2)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(1, 3)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(2, 1)
.Value = "sortiert nach Blatt-Nr."
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(2, 5)
.Value = "alphabetisch sortiert"
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
'Laufende Blattnummerierung + Blattname einfügen
For Each Blatt In Sheets
Sheets("Inhaltsverzeichnis").Cells(zeile, 1).Value = "Blatt " & zeile - 2
Sheets("Inhaltsverzeichnis").Cells(zeile, 2).Value = Blatt.Name
'Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Blatt.Cells.SpecialCells(xlLastCell). _
Address(False, False)
Sheets("Inhaltsverzeichnis").Hyperlinks.Add Anchor:=Cells(zeile, 2), Address:="", _
SubAddress:="'" & _
Blatt.Name & "'!A1", TextToDisplay:=Blatt.Name
Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Blatt.Cells.SpecialCells(xlLastCell). _
Address(False, False)
zeile = zeile + 1
Next Blatt
Sheets("Inhaltsverzeichnis").Cells(3, 3) = "G" & Sheets("Inhaltsverzeichnis").Cells. _
SpecialCells(xlLastCell).Row
ActiveSheet.Columns("B:B").EntireColumn.AutoFit
'Kopiere die zwei erstellten Spalten und sortiere Hyperlinks
Range("A3", Range("C65536").End(xlUp)).Copy Range("E3")
Application.CutCopyMode = False
Range("E3", Range("G65536").End(xlUp)).Select
Selection.Sort Key1:=Range("F3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A1").Select
ActiveSheet.Columns("C:C").Hidden = True
ActiveSheet.Columns("F:F").EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
Range("A3").Select
ActiveWindow.FreezePanes = True
Cells(1, 4).Value = "Diese Datei hat  " & Worksheets.Count & "  Tabellen"
'Userform ausblenden
'frmInhaltsverz.Hide
'Ursprungszustand wieder herstellen
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Gruß Werner

Anzeige
AW: Erweiterung Inhaltsverzeichnis
27.09.2015 18:52:25
erichm
Hallo Werner,
besten Dank - funktioniert wunderbar.
Eine Optimierung wäre für umfangreiche Dateien mit vielen Tabellenblättern noch sinnvoll:
Die Auflistung der letzten Zelle (derzeit Spalte G) in:
- Spalte G oder H nur den Buchstaben der jeweiligen Spalte
- Spalte H oder I nur die Zahl (= Zeile)
Damit kann ich dann anschließend nach Bedarf die Größe der Tabellen sortieren.
Besten Dank!
mfg

AW: Erweiterung Inhaltsverzeichnis
28.09.2015 01:09:04
Werner
Hallo Erich,
dann versuch mal das:
Sub inhaltsverzeichnis_erstellen()
'Inhaltsverzeichnis aller Tabellenblätter
'im erten Tabellenblatt ab Zeile A1 einfügen
Dim Blatt As Object
Dim zeile As Long
Dim letzteZeile As Long
Dim NewSheet As Worksheet
Dim i As Integer
zeile = 3
'Fehlerhandling
On Error Resume Next
'Abfrage unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Sheet Inhaltsverzeichnis auf jeden Fall löschen
Sheets("Inhaltsverzeichnis").Delete
'Neues Tabellenblatt mit dem Namen Inhaltsverzeichnis hinzufügen
Set NewSheet = Worksheets.Add
NewSheet.Name = "Inhaltsverzeichnis"
Sheets("Inhaltsverzeichnis").Move Before:=Sheets(1) ' = Tabellenblatt als erstes
'Überschrift Einfügen und formatieren
With Sheets("Inhaltsverzeichnis").Range("A1")
.Value = "Inhaltsverzeichnis"
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(1, 2)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(1, 3)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(2, 1)
.Value = "sortiert nach Blatt-Nr."
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(2, 6)
.Value = "alphabetisch sortiert"
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
'Laufende Blattnummerierung + Blattname einfügen
For Each Blatt In Sheets
Sheets("Inhaltsverzeichnis").Cells(zeile, 1).Value = "Blatt " & zeile - 2
Sheets("Inhaltsverzeichnis").Cells(zeile, 2).Value = Blatt.Name
Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Blatt.Cells.SpecialCells(xlLastCell).  _
_
Address(False, False)
Sheets("Inhaltsverzeichnis").Hyperlinks.Add Anchor:=Cells(zeile, 2), Address:="", _
SubAddress:="'" & _
Blatt.Name & "'!A1", TextToDisplay:=Blatt.Name
Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Left(Blatt.Cells.SpecialCells( _
xlLastCell).Address(False, False), 1)
Sheets("Inhaltsverzeichnis").Cells(zeile, 4).Value = Blatt.Cells.SpecialCells(xlLastCell). _
Row
zeile = zeile + 1
Next Blatt
Sheets("Inhaltsverzeichnis").Cells(3, 3) = "I"
Sheets("Inhaltsverzeichnis").Cells(3, 4) = Sheets("Inhaltsverzeichnis").Cells.SpecialCells( _
xlLastCell).Row
ActiveSheet.Columns("B:B").EntireColumn.AutoFit
'Kopiere die zwei erstellten Spalten und sortiere Hyperlinks
Range("A3", Range("D65536").End(xlUp)).Copy Range("F3")
Application.CutCopyMode = False
Range("E3", Range("G65536").End(xlUp)).Select
Selection.Sort Key1:=Range("F3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Cells(1, 4).Value = "Diese Datei hat  " & Worksheets.Count & "  Tabellen"
letzteZeile = Sheets("Inhaltsverzeichnis").Cells.SpecialCells(xlLastCell).Row
Range("C3:D" & letzteZeile).ClearContents
Range("A1").Select
ActiveSheet.Columns("C:C").ColumnWidth = 1.57
ActiveSheet.Columns("F:F").ColumnWidth = 10.71
ActiveSheet.Columns("G:I").EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
Range("A3").Select
ActiveWindow.FreezePanes = True
'Userform ausblenden
'frmInhaltsverz.Hide
'Ursprungszustand wieder herstellen
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Gruß Werner

Anzeige
AW: Erweiterung Inhaltsverzeichnis
28.09.2015 08:42:53
erichm
Hallo Werner,
besten Dank!
Zunächst eine Änderung beim kopieren unten:
' Range("F3", Range("H65536").End(xlUp)).Select
' Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
Damit stimmt die Sortierung bzw. die Spalten wieder.
Derzeit wird die letzte Spalte des jeweiligen Blatts noch falsch ermittelt (das hängt wohl damit zusammen, wenn es über "Z" hinausgeht. Korrektur habe ich aber nicht geschafft; im Code vorher passte das noch - die entscheidende Stelle oder Änderung konnte ich aber nicht herleiten.
Besten Dank nochmal.
mfg

Anzeige
AW: Erweiterung Inhaltsverzeichnis
28.09.2015 15:43:55
Werner
Hallo Erich,
den Bereich für die Sortierung anzupassen hatte ich leider vergessen - war wohl der Zeit geschuldet.
Versuch mal das:
Sub inhaltsverzeichnis_erstellen()
'Inhaltsverzeichnis aller Tabellenblätter
'im erten Tabellenblatt ab Zeile A1 einfügen
Dim Blatt As Object
Dim zeile As Long
Dim letzteZeile As Long
Dim NewSheet As Worksheet
Dim i As Integer
Dim strLastColAlpha As String
zeile = 3
'Fehlerhandling
On Error Resume Next
'Abfrage unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Sheet Inhaltsverzeichnis auf jeden Fall löschen
Sheets("Inhaltsverzeichnis").Delete
'Neues Tabellenblatt mit dem Namen Inhaltsverzeichnis hinzufügen
Set NewSheet = Worksheets.Add
NewSheet.Name = "Inhaltsverzeichnis"
Sheets("Inhaltsverzeichnis").Move Before:=Sheets(1) ' = Tabellenblatt als erstes
'Überschrift Einfügen und formatieren
With Sheets("Inhaltsverzeichnis").Range("A1")
.Value = "Inhaltsverzeichnis"
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(1, 2)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(1, 3)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(2, 1)
.Value = "sortiert nach Blatt-Nr."
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(2, 6)
.Value = "alphabetisch sortiert"
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
'Laufende Blattnummerierung + Blattname einfügen
For Each Blatt In Sheets
Sheets("Inhaltsverzeichnis").Cells(zeile, 1).Value = "Blatt " & zeile - 2
Sheets("Inhaltsverzeichnis").Cells(zeile, 2).Value = Blatt.Name
Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Blatt.Cells.SpecialCells(xlLastCell). _
Address(False, False)
Sheets("Inhaltsverzeichnis").Hyperlinks.Add Anchor:=Cells(zeile, 2), Address:="",  _
SubAddress:="'" & _
Blatt.Name & "'!A1", TextToDisplay:=Blatt.Name
Sheets("Inhaltsverzeichnis").Cells(zeile, 3).Value = Split(Columns(Blatt.Cells. _
SpecialCells(xlLastCell).Column).Address(0, 0), ":")(0)
Sheets("Inhaltsverzeichnis").Cells(zeile, 4).Value = Blatt.Cells.SpecialCells(xlLastCell). _
Row
zeile = zeile + 1
Next Blatt
Sheets("Inhaltsverzeichnis").Cells(3, 3) = "I"
Sheets("Inhaltsverzeichnis").Cells(3, 4) = Sheets("Inhaltsverzeichnis").Cells.SpecialCells(  _
_
xlLastCell).Row
ActiveSheet.Columns("B:B").EntireColumn.AutoFit
'Kopiere die zwei erstellten Spalten und sortiere Hyperlinks
Range("A3", Range("D65536").End(xlUp)).Copy Range("F3")
Application.CutCopyMode = False
Range("F3", Range("I65536").End(xlUp)).Select
Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Cells(1, 4).Value = "Diese Datei hat  " & Worksheets.Count & "  Tabellen"
letzteZeile = Sheets("Inhaltsverzeichnis").Cells.SpecialCells(xlLastCell).Column
Range("C3:D" & letzteZeile).ClearContents
Range("A1").Select
ActiveSheet.Columns("C:C").ColumnWidth = 1.57
ActiveSheet.Columns("F:F").ColumnWidth = 10.71
ActiveSheet.Columns("G:I").EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
Range("A3").Select
ActiveWindow.FreezePanes = True
'Userform ausblenden
'frmInhaltsverz.Hide
'Ursprungszustand wieder herstellen
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Klappts?
Gruß Werner

Anzeige
AW: Erweiterung Inhaltsverzeichnis
28.09.2015 15:47:32
Werner
Hallo Erich,
ich habe da im Code oben noch folgendes drin
Dim strLastColAlpha As String
das brauchst du nicht, war nur zum testen. Die Zeile kannst du löschen.
Gruß Werner

AW: Erweiterung Inhaltsverzeichnis
28.09.2015 16:29:47
erichm
noch nicht ganz; die Spalten C + D werden nur bis Zeile 9 geleert (müsste bei meiner Datei bis Zeile 26 gehen);
muss an diesem Codeteil liegen?:
'letzteZeile = Sheets("Inhaltsverzeichnis").Cells.SpecialCells(xlLastCell).Column
' Range("C3:D" & letzteZeile).ClearContents
Aber ansonsten ist das jetzt wirklich eine Klasse Übersicht; da hat man schnell im Blick, welche Tabellen den größten Zellenbedarf inne haben!
mfg

Anzeige
AW: Erweiterung Inhaltsverzeichnis
28.09.2015 17:43:46
Werner
Hallo Erich,
einfach anstatt .Column .Row am Ende
Gruß Werner

AW: Erweiterung Inhaltsverzeichnis
28.09.2015 18:14:10
erichm
OK - DANKE!
Jetzt mal wieder die perfekte Lösung hier gefunden.
mfg

AW: Danke für die Rückmeldung owT
28.09.2015 18:16:55
Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige