Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SheetName auslesen

SheetName auslesen
24.06.2018 13:06:16
Peter
Hallo zusammen
Im linken Fenster vom Makroeditor sehe ich die einzelnen Sheets, zB Tabelle12 (Test)
mit dem folgenden Code
sCod = CodeName 'ActiveSheet.CodeName 'Tabelle12
ThisWorkbook.VBProject.VBComponents(sCod).Activate
sTab = ActiveSheet.Name 'Test
erhalte ich den Tabellennamen "Test"
Wie kann ich den Namen "Test" bekommen, ohne dass ich das Tabellenblatt aktiviere?
Danke für Eure Hilfe
Pepi
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SheetName auslesen
24.06.2018 13:08:58
Hajo_Zi
Hallo Pepi,
ActiveSheet.name' das soll ja nicht sein.
oder
Variable="Test"

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
MsgBox Tabelle12.Name ... owT
24.06.2018 13:12:32
Matthias
Sheetname auslesen
24.06.2018 13:43:25
Peter
Hallo zusammen
Offenbar habe ich mich unklar ausgedrückt...
Ich habe ein Makro TabellenName() auf dem Tabellenblatt, dort wo unter anderen auch
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ist
Sub TabellenName()
dim sCod$, sTab$
sCod = CodeName 'zB Tabelle12
ThisWorkbook.VBProject.VBComponents(sCod).Activate
sTab = ActiveSheet.Name 'zB Test
End Sub
Das Problem ist, dass wenn ich im linken Fenster ein Projekt "Tabelle12 (Test)" aktiviere, bleibt die aktivierte Tabelle immer noch die gleiche (zB Tabelle11)
Nun möchte ich den 2. Schritt elegant umgehen (Tabellen aktivieren geht bekanntlich langsam und führt zu einem flattern)
mfg Pepi
Anzeige
AW: SheetName auslesen
24.06.2018 13:40:56
Peter
Hallo zusammen
Offenbar habe ich mich unklar ausgedrückt...
Ich habe ein Makro TabellenName() auf dem Tabellenblatt, dort wo unter anderen auch
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ist
Sub TabellenName()
dim sCod$, sTab$
sCod = CodeName 'zB Tabelle12
ThisWorkbook.VBProject.VBComponents(sCod).Activate
sTab = ActiveSheet.Name 'zB Test
End Sub

Das Problem ist, dass wenn ich im linken Fenster ein Projekt "Tabelle12 (Test)" aktiviere, bleibt die aktivierte Tabelle immer noch die gleiche (zB Tabelle11)
Nun möchte ich den 2. Schritt elegant umgehen (Tabellen aktivieren geht bekanntlich langsam und führt zu einem flattern)
mfg Pepi
Anzeige
AW: SheetName auslesen
24.06.2018 14:58:09
Sepp
Hallo Peter,
beschreibe erst mal, was du erreichen willst.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: SheetName auslesen
24.06.2018 16:04:12
Peter
Hallo Sepp
Ich brauche einfach den Blattnamen
sTab = Tabelle1.name gibt mit den Blattnamen
da ich aber nicht weiss ob es Tabelle1, 2,oder x ist muss ich über CodenName gehen
sCod = CodeName gibt "Tabelle1"
leider funktioniert aber
sTab = CodeName.name nicht - Fehler - wie ist denn hier die Synthax
vielen Dank Pepi
Anzeige
AW: SheetName auslesen
24.06.2018 16:30:24
Sepp
Hallo Peter,
wenn du den Codenamen weißt, wo liegt dann das Problem?
 ABCDEF
1Gruß Sepp
2
3

Anzeige
und wenn du...
24.06.2018 16:49:10
Sepp
... statt "Ich brauche einfach den Blattnamen" beschreiben würdest, was du im Endeffekt erreichen willst, dann gibt es bestimmt eine Lösung.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
SheetName auslesen
24.06.2018 18:59:10
Peter
Hallo Sepp
Ich habe hier eine Beispielsdatei mit dem Makro "to_Makros_Kopieren()" hochgeladen.
Dieses Makro kopiert die Makros des aktuellen Moduls auf die anderen Module.
Ich habe Arbeitsmappen mit vielen Tabellen, die alle die gleichen Makros haben. Wenn etwas ändert kann ich damit schnell wieder alle angleichen. Es ist mir aber schon passiert, dass das falsche Modul als Vorlage benutzt wurde.
https://www.herber.de/bbs/user/122280.xlsm
Das Makro funktioniert einwandfrei (habe es in diesem Forum gefunden und auf meine Bedürfnisse angepasst)
Was mich stört ist dieser sheets(xy).activate
Meine Frage wäre nochmals wie kann ich auf Grund vom CodeNamen "Tabelle2" den Blattnamen "Blatt_2" auslesen.
lg Pepi
Anzeige
AW: SheetName auslesen
24.06.2018 19:17:02
Sepp
Hallo Peter,
Private Sub to_Makros_Kopieren() 'Su180618, Su171206, Su170225, 150503 HerberForum * Makro_kopieren * kopiert alle Makros vom aktuellen TabellenBlatt in die anderen TabellenBlätter 
  Dim objCodeModule As Object, objSh As Worksheet
   
  If MsgBox(Me.Name & " * " & Me.CodeName & vbLf & "ist dies die richtige Tabelle?", vbQuestion + vbYesNo) = vbYes Then
    Set objCodeModule = ThisWorkbook.VBProject.VBComponents(Me.CodeName).CodeModule
    For Each objSh In ThisWorkbook.Worksheets
      If Not objSh Is Me Then
        With ThisWorkbook.VBProject.VBComponents(objSh.CodeName).CodeModule
          .DeleteLines 1, .CountOfLines
          .InsertLines 1, objCodeModule.Lines(1, objCodeModule.CountOfLines)
        End With
      End If
    Next
  End If
  
  Set objCodeModule = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Aber warum stellst du die Event-Codes nicht in "DieseArbeitsmappe" dann stehen sie in jeder Tabelle zur Verfügung und du kannst sie zentral Verwalten.
Die Anderen Codes in ein allgemeines Modul und die Kopiererei hat ein Ende.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: SheetName auslesen
24.06.2018 19:45:02
Peter
Lieber Sepp
Ganz herzlichen Dank für Deine Anpassungen
Es funktioniert alles bestens.
Dass man die Events-Codes unter "Diese Arbeitsmappe" kopieren kann für alle Sheets wusste ich gar nicht (smile) - ein ganz neuer Ansatz. Es gibt zwar ein paar Ausnahmen, wo sie nicht funktionieren dürfen oder anders, doch werde ich mich in naher Zukunft damit beschäftigen.
lg Peter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Blattnamen in Excel mit VBA auslesen


Schritt-für-Schritt-Anleitung

Um den Namen eines Excel-Tabellenblatts ohne Aktivierung des Blattes auszulesen, kannst Du den folgenden VBA-Code verwenden:

  1. Öffne Excel und aktiviere den VBA-Editor mit Alt + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > "Einfügen" > "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub BlattNameAuslesen()
       Dim sCod As String
       Dim sTab As String
    
       ' Hier den CodeName des gewünschten Blattes eingeben
       sCod = "Tabelle2" ' Beispiel-CodeName
    
       ' Blattnamen auslesen
       sTab = ThisWorkbook.VBProject.VBComponents(sCod).Name
    
       ' Ergebnis in einer Meldung anzeigen
       MsgBox "Der Blattname ist: " & sTab
    End Sub
  4. Führe das Makro mit F5 aus, um den Blattnamen anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Lösung: Überprüfe, ob der angegebene CodeName korrekt ist. Du kannst den CodeName im VBA-Editor im Projektfenster sehen.
  • Fehler: "Zugriff auf den VBProject nicht erlaubt"

    • Lösung: Stelle sicher, dass Du die Makrosicherheit in Excel so eingestellt hast, dass der Zugriff auf das VBA-Projekt erlaubt ist. Dies kannst Du in den Excel-Optionen unter "Trust Center" konfigurieren.

Alternative Methoden

Falls Du den Namen des Blattes direkt aus einer Zelle auslesen möchtest, kannst Du den folgenden Code verwenden:

Sub BlattnamenAuslesenDirekt()
    Dim sTab As String
    sTab = ThisWorkbook.Worksheets(1).Name ' Ersetze 1 mit der Nummer des gewünschten Blattes
    MsgBox "Der Blattname ist: " & sTab
End Sub

Diese Methode ist einfacher, benötigt jedoch, dass das Blatt aktiv ist oder im Code referenziert wird.


Praktische Beispiele

Hier sind einige nützliche Beispiele, um den Blattnamen zu auslesen:

  1. Auslesen aller Blattnamen in einer Schleife:

    Sub AlleBlattnamenAuslesen()
       Dim ws As Worksheet
       Dim namenListe As String
    
       For Each ws In ThisWorkbook.Worksheets
           namenListe = namenListe & ws.Name & vbCrLf
       Next ws
    
       MsgBox "Blattnamen: " & vbCrLf & namenListe
    End Sub
  2. Speichern des Blattnamens in einer Zelle:

    Sub BlattnameInZelleSpeichern()
       Dim sTab As String
       sTab = ThisWorkbook.Worksheets(1).Name
       ThisWorkbook.Worksheets(1).Range("A1").Value = sTab ' Speichert den Blattnamen in Zelle A1
    End Sub

Tipps für Profis

  • Verwendung von CodeNames: Die Verwendung von CodeNames ist oft sicherer als die Verwendung von Sheet-Index, da sich die Indizes ändern können, wenn Blätter hinzugefügt oder gelöscht werden.
  • Vermeide die Verwendung von .Activate: Um die Leistung zu verbessern, versuche, .Activate zu vermeiden, wenn Du mit VBA arbeitest.
  • Dokumentiere Deinen Code: Füge Kommentare hinzu, um die Funktionalität Deines Codes zu erläutern, besonders wenn Du mit mehreren Blättern arbeitest.

FAQ: Häufige Fragen

1. Wie finde ich den CodeName eines Blattes? Du kannst den CodeName eines Blattes im VBA-Editor im Projektfenster sehen. Klicke mit der rechten Maustaste auf das Blatt und wähle "Eigenschaften".

2. Ist es möglich, den Namen eines Blattes in einer Variablen zu speichern? Ja, Du kannst den Blattnamen in einer String-Variablen speichern, wie im Beispiel oben gezeigt.

3. Funktioniert dieser Code in allen Excel-Versionen? Der bereitgestellte Code sollte in den meisten modernen Excel-Versionen (z.B. Excel 2016, 2019, 365) funktionieren, die VBA unterstützen.

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