kennt jemand eine einfache Lösung, mit der Mann sämtliche Reitername in einem Arbeitsblatt auslesen lassen kann und dann in einem anderen Arbeitsblatt untereinander schreiben kann.
Viele Grüße und schon einmal vielen Dank.
Jan
VBA-Code: | ||||||||||||||||||||||
Sub TabNamenAuflisten() Dim ws As Worksheet Dim i As Integer i = 1 For Each ws In Worksheets Cells(i, "A") = ws.Name i = i + 1 Next End Sub Gruß Jürgen
AW: Arbeitsblätternamen/Reiternamen auslesen
Overmind
Super, danke! Weißt du auch wie es anders herum geht?
AW: Arbeitsblätternamen/Reiternamen auslesen
Backowe
Hi Jan, was meinst Du damit, absteigende Sortierung? Gruß Jürgen
AW: Arbeitsblätternamen/Reiternamen auslesen
Overmind
Ich meinte: Ich schreibe ein Tabelle mit Namen und Excel erstellt mir die Reiter mit den entsprechenden Namen.
AW: Arbeitsblätternamen/Reiternamen auslesen
Backowe
Hi Jan,
|
VBA-Code: | ||||||||||||||||||||
Private Sub Worksheet_Change(ByVal Target As Range) 'Code in das entsprechende Tabellenblatt If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then If Target <> "" And SheetExists(Target) = False Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target End If End If End Sub Public Function SheetExists(ByVal SheetName As String) As Boolean On Error Resume Next SheetExists = (Sheets(SheetName).Name <> "") On Error GoTo 0 End Function Gruß Jürgen
AW: Arbeitsblätternamen/Reiternamen auslesen
Overmind
Wie bekomme ich das zum Laufen? Will irgendwie ein Makro von mir haben?
Der Code kommt in die Tabelle!
Backowe
Hi Jan, rechte Maustaste auf Tabellenreiter, "Code anzeigen " auswählen und den Code in das rechte Fenster kopieren und VBA-Editor schliessen, dann sollte es funktionieren. Gruß Jürgen
AW: Der Code kommt in die Tabelle!
Overmind
Hi Jürgen, super, vielen Dank! Nochmals zu deinen Ersten Code: Funktioniert super! ******************************************
AW: Der Code kommt in die Tabelle!
Backowe
Hi Jan, zu Deiner 1. Frage:
|
Sub TabNamenAuflisten()
Dim ws As Worksheet
Dim i As Integer
i = 1
For Each ws In Worksheets
Cells(i, "A") = ws.Name
i = i + 1
Next
End Sub
*********
Gibt es eine mgl. das die ich die Zeilen wie eine Inhaltsverzeichnis nutzen kann? D.h. das sie als Link gleich auf die Reiter funktionieren?
Noch eine anderen Frage, unabhängig von der obrigen. Ich muss mich gerade in viele Dateien einarbeiten, die unendlich miteinander verknüpft sind. Gibt es ein Tool, dass wie ein Chart zeigt, wie die Datei mit sämtlichen anderen Dateien verknüft ist. Sprich: aus der Datei die Info, aus der anderen die......
Gibt es so etwas?
Vielen Dank nochmals ,
Jan
VBA-Code: | ||||||||||||||||||
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Der Code kommt wieder in das Tabellenblatt If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then If Target <> "" Then Sheets("" & Target.Value & "").Activate End If End Sub Zu Deiner 2. Frage, schaue Dir mal folgende Seite an: http://www.xlam.ch/vbacode/vbacode5.htm#Externe%20Verkn%C3%BCpfungen%20in%20einer%20Arbeitsmappe%20auflisten Gruß Jürgen
AW: Arbeitsblätternamen/Reiternamen auslesen
Overmind
Hallo Juergen, das Tool "TabNamenAuflisten()" funktioniert super. Kann man das erweitern, dass er gleich eine Hyperlinkverknüpfung auf den Reiter z.B. Zelle A1 macht?. Dann könnte man diese Auflistung wie ein Inhaltsverzeichnis nutzen. Viele Grüsse und nochmals vielen Dank an alle. Jan
Das hatte Dir gestern zwar schon in ...
Backowe
Hallo Jan, ... Teilstücken geschrieben, so jetzt das Ganze noch einmal zusammengefasst!
|
VBA-Code: | ||||||||||||||||
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Der Code kommt wieder in das Tabellenblatt If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then If Target <> "" Then Sheets("" & Target.Value & "").Activate End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim i As Integer If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then If Target <> "" And SheetExists(Target) = False Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target Application.GoTo Reference:=Sheets("Tabelle1").Range("A1"), Scroll:=True i = 1 For Each ws In Worksheets Cells(i, "A") = ws.Name i = i + 1 Next End If End If End Sub Public Function SheetExists(ByVal SheetName As String) As Boolean On Error Resume Next SheetExists = (Sheets(SheetName).Name <> "") On Error GoTo 0 End Function Gruß Jürgen
AW: Das hatte Dir gestern zwar schon in ...
Overmind
Ja, das funktioniert super. Was passiert aber, wenn jemand einen Namen eine Reiters ändert. Das machen hier bei mir bei der Arbeit anscheinend Leute zum Hobby ;-).
Dann drohe den Leuten mit der Prügelstrafe! :)
Backowe
Hi Jan, wird ein Tabellenname geändert, wird er beim Deaktivieren der Tabelle wieder auf den ursprünglichen Namen zurückgesetzt. Aber eine Manipulation ist natürlich möglich! ;o)
|
VBA-Code: | ||||||||||||||
Private Sub Worksheet_Change(ByVal Target As Range) 'Code in die Tabelle! Dim ws As Worksheet Dim i As Integer If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then If Target <> "" And SheetExists(Target) = False Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target MakroEinfuegen (Target.Value) Application.Goto Reference:=Sheets(1).Range("A1"), Scroll:=True Columns(1).Clear i = 1 For Each ws In Worksheets Cells(i, "A") = ws.Name i = i + 1 Next On Error Resume Next For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Address:="#" & Range("A" & i).Value & "!A1", _ TextToDisplay:=Range("A" & i).Value Next On Error GoTo 0 End If End If End Sub Public Function SheetExists(ByVal SheetName As String) As Boolean On Error Resume Next SheetExists = (Sheets(SheetName).Name <> "") On Error GoTo 0 End Function Sub MakroEinfuegen(Tabellenname As String) 'Code in ein Modul! Dim i As Integer With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule i = .CreateEventProc("Deactivate", "Worksheet") .InsertLines i + 1, "Me.Name = """ & Tabellenname & """" End With End Sub Gruß Jürgen
VBA Lösung
Tino
Hallo, hier mal eine VBA Lösung. kommt als Code in ein Modul
Gruß Tino |
Option Explicit
Function TabellenName(iIndex As Integer) As String
TabellenName = Sheets(iIndex).Name
End Function
In der Tabelle kannst Du dies nun wie eine Formel verwenden.
Tabelle1
A | |
1 | Tabelle1 |
2 | Tabelle2 |
Formeln der Tabelle | ||||||
|
Um die Reiternamen in Excel auszulesen und in einem anderen Arbeitsblatt aufzulisten, kannst du den folgenden VBA-Code verwenden:
Sub TabNamenAuflisten()
Dim ws As Worksheet
Dim i As Integer
i = 1
For Each ws In Worksheets
Cells(i, "A") = ws.Name
i = i + 1
Next
End Sub
ALT + F11
, um den VBA-Editor zu starten.Fehler: "Komponente nicht gefunden"
Lösung: Stelle sicher, dass du den Code im richtigen Modul eingefügt hast. Der Code muss im Tabellenblatt-Modul sein, nicht in einem allgemeinen Modul.
Fehler: "Sub oder Funktion nicht gefunden"
Lösung: Überprüfe, ob du das Makro korrekt aufgerufen hast. Du kannst das Makro über die Entwicklertools oder ALT + F8
ausführen.
Excel-Formel: Du kannst die Namen von Tabellenblättern auch mit einer benutzerdefinierten Formel auslesen. Hier ist ein Beispiel:
Function TabellenName(iIndex As Integer) As String
TabellenName = Sheets(iIndex).Name
End Function
Verwende diese Funktion in einer Zelle, um den Namen des jeweiligen Tabellenblattes zu erhalten.
Namen aus Zellen auslesen: Wenn du die Namen von Tabellenblättern aus einer Liste in einer Zelle erstellen möchtest, kannst du den folgenden VBA-Code verwenden:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then
If Target <> "" And Not SheetExists(Target) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Target
End If
End If
End Sub
Sub AlleTabellenblattnamenAuslesen()
Dim ws As Worksheet
Dim i As Integer
i = 1
For Each ws In ThisWorkbook.Worksheets
ThisWorkbook.Sheets("DeinZielBlatt").Cells(i, 1).Value = ws.Name
i = i + 1
Next ws
End Sub
Sub TabNamenMitLinksAuflisten()
Dim ws As Worksheet
Dim i As Integer
i = 1
For Each ws In Worksheets
Cells(i, "A") = ws.Name
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:="", SubAddress:=ws.Name & "!A1", TextToDisplay:=ws.Name
i = i + 1
Next ws
End Sub
Verwende den SheetExists
-Code, um zu überprüfen, ob ein Blatt mit dem gewünschten Namen bereits existiert, bevor du versuchst, ein neues Blatt zu erstellen.
Setze die VBA-Sicherheitsstufe so, dass du Makros ausführen kannst. Gehe zu Datei -> Optionen -> Trust Center -> Einstellungen für das Trust Center -> Makroeinstellungen
.
Du kannst auch den Code so anpassen, dass er nur die Namen der sichtbaren oder ausgeblendeten Blätter ausliest, indem du die Visible
-Eigenschaft des Blattes überprüfst.
1. Frage
Wie kann ich die Namen von Tabellenblättern auslesen ohne VBA?
Antwort: Es gibt keine direkte Excel-Formel, um die Namen von Tabellenblättern auszulesen. VBA ist die beste Methode, um diese Informationen zu erhalten.
2. Frage
Was passiert, wenn jemand einen Reiternamen ändert?
Antwort: Wenn ein Benutzer den Namen eines Blattes ändert, wird der Link in der Liste ungültig. Du musst die Liste erneut aktualisieren, um die neuen Namen anzuzeigen.
3. Frage
Kann ich den Code in eine Schaltfläche einfügen?
Antwort: Ja, du kannst eine Schaltfläche auf deinem Arbeitsblatt einfügen und den VBA-Code an diese Schaltfläche binden, um das Auslesen der Reiternamen mit einem Klick auszuführen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen