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

ActiveSheet.CodeName

Forumthread: ActiveSheet.CodeName

ActiveSheet.CodeName
29.09.2016 12:32:52
Hartmut_M
Hallo, könnt ihr mir bitte da helfen?
Ich möchte per VBA den Codenamen des aktiven Tabellenblattes auslesen und als Variable speichern. Habe dafür diesen Code:
'Codename der aktiven Tabelle als Variable
Dim Tabelle$
Tabelle = ActiveSheet.CodeName
Lasse ich das Makro automatisch laufen, wird die variable nicht gefüllt.
Prüfe ich im Einzelschritt-Modus, wird der Codename in die Variable übernommen.
Hat jemand eine Erklärung dafür?
Gruß Hartmut
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: ActiveSheet.CodeName
29.09.2016 12:39:08
Rudi
Hallo,
Lasse ich das Makro automatisch laufen, wird die variable nicht gefüllt.
woher weißt du das?
Gruß
Rudi
AW: ActiveSheet.CodeName
29.09.2016 14:56:34
Hartmut_M
Hallo Rudi,
weil der Code abbricht. Beim debuggen sehe ich dann, dass die Variable leer ist.
Gruß Hartmut
AW: ActiveSheet.CodeName
29.09.2016 12:43:28
JoWE
Hallo Hartmut,
wenn schon "Tabelle$", dann auch "Tabelle$ = ActiveSheet.codename"
Sub test()
Dim Tabelle$
Tabelle$ = ActiveSheet.CodeName
MsgBox Tabelle$
End Sub
so klappts bei mir.
Gruß
Jochen
Anzeige
AW: ActiveSheet.CodeName
29.09.2016 12:50:26
Mullit
Hallo,
das Dollar-Zeichen ist das Typenkennzeichen für Strings, sollte also genauso funktionieren, wie von Dir geschrieben, zeig mal Deine ganze Proc....
Gruß, Mullit
wenn schon "Tabelle$", ...
29.09.2016 12:51:01
Rudi
Hallo Jochen,
das geht auch mit Tabelle = ...
$ ist nur das Typkennzeichen. Ersetzt As String.
Gruß
Rudi
Anzeige
AW: wenn schon "Tabelle$", ...
29.09.2016 12:58:57
JoWE
Aah! Danke.
Gruß
Jochen
AW: ActiveSheet.CodeName
29.09.2016 12:45:39
kultnoob
In Tabelle 1

Option Explicit
Sub test()
Dim LOL As String
LOL = ActiveWorkbook.ActiveSheet.Name
End Sub

In Modul 1

Option Explicit
Sub test()
Dim LOL As String
LOL = ActiveWorkbook.Sheets(1).Name
End Sub

Anzeige
Thema verfehlt. 6
29.09.2016 12:48:21
Rudi
Hallo,
Name ist was ganz anderes als CodeName.
Gruß
Rudi
AW: Thema verfehlt. 6
29.09.2016 14:15:57
Hartmut_M
Hallo,
hier ist der gesamte Code. Die Ausführung starte ich durch einen Button auf einem Tabellenblatt.
Habe jetzt folgendes festgestellt: Bei Betätigung des Buttons, bricht das Programm ab, weil sich die variable "varTabelle" nicht füllt (varTabelle = ActiveSheet.CodeName).
Jetzt das, was ich nicht verstehe. Öffne ich vorher den VBA-Editor und klicke dann auf den Button im Tabellenblatt, läuft das Makro komplett ohne Fehler durch, genauso wie im Einzelschritt mit F8.
Sub Dateiimport()
'Bestandskonto als Variable deklarieren
Dim GL$
GL = Worksheets("Deckblatt").Range("C41").Value
'Prüfen, ob csv-Datei vorhanden
Dim Pfad$
Pfad = "Y:\Desktop\Fachkontrolle\" & GL & ".csv"
If Dir(Pfad) = "" Then
MsgBox "Die CSV-Datei mit der Bestandsnummer " & GL & vbLf & "ist nicht im Ordner  _
Fachkontrolle auf dem Desktop vorhanden!"
Exit Sub
End If
'Prüfen ob Tabellenblatt mit GL-Konto existiert
Dim Ws As Worksheet
For Each Ws In ActiveWorkbook.Sheets
If Ws.Name = GL Then Exit Sub
Next Ws
'Neues Tabellenblatt erzeugen mit GL-Kontonummer
ThisWorkbook.Worksheets.Add.Name = GL
'Tabellenblatt aus CSV importieren
Dim Dateiname, Tabellenblatt$
Dim Wsh As Worksheet
Dateiname = "Y:\Desktop\Fachkontrolle\" & GL & ".csv"
Tabellenblatt = GL
Set Wsh = ActiveWorkbook.Sheets(Tabellenblatt)
If Dateiname  False Then
Application.ScreenUpdating = False
Workbooks.Open Filename:=Dateiname, Local:=True
ActiveSheet.UsedRange.Copy Wsh.Cells(1)
ActiveWorkbook.Close SaveChanges:=False
Application.ScreenUpdating = True
End If
Range("A1:V1").AutoFilter
'Codename der aktiven Tabelle als Variable
Dim varTabelle$
varTabelle = ActiveSheet.CodeName
'Makro in neues Tabellenblatt kopieren
Dim x As Integer
With ThisWorkbook.VBProject.VBComponents(varTabelle).CodeModule
x = .CreateEventProc("Change", "Worksheet")
.InsertLines x + 1, "Dim NR As String, VN As String"
.InsertLines x + 2, "Set Target = Application.Intersect(Target, Range(""V:V""))"
.InsertLines x + 3, "If Target Is Nothing Then Exit Sub"
.InsertLines x + 4, "If Target.Value = ""X"" or Target.Value = ""x""  Then"
.InsertLines x + 5, "SNR = Target.Offset(0, -20).Value" 'ist zu ändern wenn X nicht in  _
Spalte V steht
.InsertLines x + 6, "VN = Target.Offset(0, -18).Value" 'ist zu ändern wenn X nicht in  _
Spalte V steht
.InsertLines x + 7, "Sheets(""Bericht"").Select"
.InsertLines x + 8, "Sheets(""Bericht"").Range(""A5"").Activate"
.InsertLines x + 9, "10:"
.InsertLines x + 10, "If ActiveCell  """" Then"
.InsertLines x + 11, "ActiveCell.Offset(1, 0).Activate"
.InsertLines x + 12, "GoTo 10"
.InsertLines x + 13, "Else"
.InsertLines x + 14, "ActiveCell.Value = SNR"
.InsertLines x + 15, "ActiveCell.Offset(0, 1).Value = VN"
.InsertLines x + 16, "ActiveCell.Offset(0, 2).Select"
.InsertLines x + 17, "End If"
.InsertLines x + 18, "End If"
End With
End Sub 

Anzeige
AW: ActiveSheet.CodeName
29.09.2016 15:08:59
Hartmut_M
Hallo Kultnoob,
ich brauche nicht den Namen sondern den CodeName.
Ist für den weiteren Makroverlauf erforderlich.
Gruß Hartmut
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Codenamen des aktiven Tabellenblatts in VBA auslesen


Schritt-für-Schritt-Anleitung

Um den Codenamen des aktiven Tabellenblatts in VBA auszulesen und als Variable zu speichern, kannst du folgenden Code verwenden:

Sub GetActiveSheetCodeName()
    ' Codename der aktiven Tabelle als Variable
    Dim Tabelle As String
    Tabelle = ActiveSheet.CodeName

    ' Ausgabe des Codenamens
    MsgBox "Der Codename des aktiven Blattes ist: " & Tabelle
End Sub

Achte darauf, dass du den Code in ein Modul einfügst. Du kannst das Makro dann über die Excel-Oberfläche oder per Button ausführen.


Häufige Fehler und Lösungen

Fehler 1: Variable bleibt leer Wenn die Variable nicht gefüllt wird, obwohl du den Code im Schritt-für-Schritt-Modus (F8) ausführst, könnte das an der Art liegen, wie das Makro gestartet wird. Stelle sicher, dass das Makro aus einem Kontext ausgeführt wird, in dem das aktive Blatt tatsächlich existiert.

Lösung: Überprüfe, ob du das Makro direkt aus dem VBA-Editor oder über einen Button auf dem Arbeitsblatt startest. Das Problem tritt häufig auf, wenn das Makro automatisch bei einem Ereignis (z.B. beim Öffnen der Arbeitsmappe) gestartet wird.


Alternative Methoden

Eine alternative Methode, um den Namen des aktiven Blattes zu erhalten, wäre die Verwendung von ActiveWorkbook.ActiveSheet:

Sub GetActiveSheetName()
    Dim BlattName As String
    BlattName = ActiveWorkbook.ActiveSheet.Name
    MsgBox "Der Name des aktiven Blattes ist: " & BlattName
End Sub

Diese Methode gibt dir den Namen des aktiven Blattes zurück, während ActiveSheet.CodeName den internen Codenamen verwendet.


Praktische Beispiele

Hier sind zwei praktische Beispiele, die zeigen, wie du den Codenamen in verschiedenen Situationen verwenden kannst:

  1. Codenamen in einer MsgBox anzeigen:
Sub ShowActiveSheetCodeName()
    Dim Codename As String
    Codename = ActiveSheet.CodeName
    MsgBox "Aktueller Codename: " & Codename
End Sub
  1. Codenamen in eine Zelle schreiben:
Sub WriteCodeNameToCell()
    Dim Codename As String
    Codename = ActiveSheet.CodeName
    Range("A1").Value = Codename
End Sub

In diesen Beispielen wird der activesheet Codename in einer MsgBox angezeigt oder in eine Zelle geschrieben.


Tipps für Profis

  • Nutze die With-Anweisung, um den Code effizienter zu gestalten:
With ActiveSheet
    MsgBox "Codename: " & .CodeName & ", Name: " & .Name
End With
  • Um den Codenamen in einem Makro dynamisch zu verwenden, speichere ihn in einer globalen Variable, um ihn in mehreren Sub-Prozeduren zu verwenden.

  • Achte darauf, dass der Codename nicht mit dem sichtbaren Namen des Blattes verwechselt wird. Der Codename bleibt auch dann gleich, wenn der Name des Blattes geändert wird.


FAQ: Häufige Fragen

1. Wie kann ich den Codenamen eines spezifischen Blattes erhalten? Du kannst den Codenamen direkt ansprechen, indem du die Arbeitsmappe und das Blatt angibst, z.B. ThisWorkbook.Sheets("Blatt1").CodeName.

2. Warum funktioniert ActiveSheet.CodeName manchmal nicht? Wenn das Makro automatisch ausgeführt wird (z.B. beim Öffnen der Datei), kann es sein, dass das aktive Blatt nicht richtig gesetzt wird. Überprüfe die Reihenfolge der Ereignisse in deinem Code.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige