Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Arbeitsblätternamen/Reiternamen auslesen

Forumthread: Arbeitsblätternamen/Reiternamen auslesen

Arbeitsblätternamen/Reiternamen auslesen
Overmind
Hallo,
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
Anzeige
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 08:26:28
Backowe
Hi 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 StringAs 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!
******************************************

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

AW: Der Code kommt in die Tabelle!
Backowe

Hi Jan,
zu Deiner 1. Frage:
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 StringAs 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 StringAs 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
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 08:32:02
Overmind
Super, danke!
Weißt du auch wie es anders herum geht?
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 08:45:53
Backowe
Hi Jan,
was meinst Du damit, absteigende Sortierung?
Gruß Jürgen
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 08:55:06
Overmind
Ich meinte:
Ich schreibe ein Tabelle mit Namen und Excel erstellt mir die Reiter mit den entsprechenden Namen.
Anzeige
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 09:07:13
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 StringAs 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!
******************************************

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

AW: Der Code kommt in die Tabelle!
Backowe

Hi Jan,
zu Deiner 1. Frage:
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 StringAs 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 StringAs 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
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
AW: Arbeitsblätternamen/Reiternamen auslesen
29.06.2009 10:34:19
Overmind
Wie bekomme ich das zum Laufen? Will irgendwie ein Makro von mir haben?
Der Code kommt in die Tabelle!
29.06.2009 10:37:56
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!
29.06.2009 11:31:33
Overmind
Hi Jürgen,
super, vielen Dank!
Nochmals zu deinen Ersten Code: Funktioniert super!
******************************************

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

Anzeige
AW: Der Code kommt in die Tabelle!
29.06.2009 11:46:19
Backowe
Hi Jan,
zu Deiner 1. Frage:
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 StringAs 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 StringAs 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
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
AW: Arbeitsblätternamen/Reiternamen auslesen
30.06.2009 10:31:21
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
Anzeige
Das hatte Dir gestern zwar schon in ...
30.06.2009 10:53:37
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 StringAs 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 StringAs 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
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
AW: Das hatte Dir gestern zwar schon in ...
30.06.2009 11:32:21
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! :)
30.06.2009 15:15:34
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 StringAs 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
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
VBA Lösung
29.06.2009 08:29:52
Tino
Hallo,
hier mal eine VBA Lösung.
kommt als Code in ein Modul
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
1Tabelle1
2Tabelle2

Formeln der Tabelle
ZelleFormel
A1=TabellenName(ZEILE($A1))
A2=TabellenName(ZEILE($A2))

Gruß Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Arbeitsblätternamen und Reiternamen in Excel auslesen


Schritt-für-Schritt-Anleitung

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
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Wähle im Projektfenster das Arbeitsblatt aus, in dem du den Code verwenden möchtest.
  3. Klicke mit der rechten Maustaste auf den Reiter und wähle „Code anzeigen“.
  4. Füge den obigen Code in das Codefenster ein.
  5. Schließe den VBA-Editor und führe das Makro aus, um alle Tabellennamen in Spalte A aufzulisten.

Häufige Fehler und Lösungen

  • 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.


Alternative Methoden

  1. 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.

  2. 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

Praktische Beispiele

  • Beispiel 1: Um eine Liste aller Reiternamen in einem Arbeitsblatt zu erstellen, kannst du folgenden Code verwenden:
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
  • Beispiel 2: Um Hyperlinks zu den Reiterblättern in der Liste zu erstellen, erweitere den obigen Code:
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

Tipps für Profis

  • 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.


FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige