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

Ansprechen Tabellenblatt über Codename (VBA)

Forumthread: Ansprechen Tabellenblatt über Codename (VBA)

Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 12:59:24
Ben
Hallo,
irgendwie stehe ich gerade auf dem Schlauch und komme nicht weiter. Vielleicht kann mir hier jemand helfen.
Ich möchte aus einer Arbeitsmappe Daten in eine zweite Arbeitsmappe kopieren. Das ganz klappt auch bisher sehr gut. Nur leider muss ich die entsprechenden Tabellenblätter über ihren "Excel-Namen" (wie heißt das eigentlich richtig?) ansprechen.
Ich verwende hierzu Objektvariablen z.B.
Set WorkbookQuelleWorksheet = Workbooks(WorkbookQuelleName).Worksheets("Lookup_Projektliste")
Ich spreche hier also das Tabellenblatt "Lookup_Projektliste" an, leider gelingt es mir nicht den richtigen Syntax zu finden, damit ich dieses Tabellenblatt mittels dem in VBA hinterlegten Codenamen (in diesem Beispiel "tbl_Lookup_Projektliste") ansprechen kann. Kann mir jemand sagen, wo der Denkfehler ist?
Gruß
Ben
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:06:08
Matthias
Hallo, probiers mal so
... Workbooks(WorkbookQuelleName).tbl_Lookup_Projektliste
Gruß Matthias
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:09:43
Ben
Hallo Matthias, da kommt leider ein "Laufzeitfehler 438 / Objekt untertstützt diese Eigenschaft oder Methode nicht".
Gruß
Ben
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:10:59
Torsten
Dann genauso wie bei Workbooks?
Workbooks(WorkbookQuelleName).Worksheets(tbl_Lookup_Projektliste)
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:11:00
Rudi
Hallo,
das geht so nicht. Man kann Worksheets in anderen Workbooks nicht über den CN ansprechen.
Das musst du über eine Schleife machen.
for each wks in Workbooks(WorkbookQuelleName).Worksheets
if wks.codename ="tbl_Lookup_Projektliste" then
set WorkbookQuelleWorksheet=wks
exit for
end if
next wks

Gruß
Rudi
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:15:12
Ben
Hallo Rudi, vielen Dank für den Hinweis! Die Schleife funktioniert anscheinend! Auch wenn mir nicht klar ist, warum das mit dem CN nicht funktioniert, aber wenn es halt so ist, komm ich um die Schleife wohl nicht drumherum...
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:18:57
Daniel
ja, ist so.
wobei die Schleife auch kürzer geht:
for each WorkbookQuelleWorksheet in Workbooks(WorkbookQuelleName).Worksheets
if WorkbookQuelleWorksheet.codename ="tbl_Lookup_Projektliste" then exit for
next
Gruß Daniel
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:18:57
Daniel
ja, ist so.
wobei die Schleife auch kürzer geht:
for each WorkbookQuelleWorksheet in Workbooks(WorkbookQuelleName).Worksheets
if WorkbookQuelleWorksheet.codename ="tbl_Lookup_Projektliste" then exit for
next
Gruß Daniel
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:18:57
Daniel
ja, ist so.
wobei die Schleife auch kürzer geht:
for each WorkbookQuelleWorksheet in Workbooks(WorkbookQuelleName).Worksheets
if WorkbookQuelleWorksheet.codename ="tbl_Lookup_Projektliste" then exit for
next
Gruß Daniel
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:19:01
Daniel
ja, ist so.
wobei die Schleife auch kürzer geht:
for each WorkbookQuelleWorksheet in Workbooks(WorkbookQuelleName).Worksheets
if WorkbookQuelleWorksheet.codename ="tbl_Lookup_Projektliste" then exit for
next
Gruß Daniel
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:16:56
Nepumuk
Hallo Ben,
das musst du so lösen:
Option Explicit

Public Sub Test()
    Dim WorkbookQuelleWorksheet As Worksheet
    Set WorkbookQuelleWorksheet = GetSheetByCodename("tbl_Lookup_Projektliste", Workbooks("xyz.xlsm"))
End Sub

Private Function GetSheetByCodename(ByVal pvstrCodeName As String, _
        Optional ByRef oprWorkbook As Workbook = Nothing) As Object

    Dim objSheet As Object
    If oprWorkbook Is Nothing Then Set oprWorkbook = ThisWorkbook
    For Each objSheet In oprWorkbook.Sheets
        If objSheet.CodeName = pvstrCodeName Then
            Set GetSheetByCodename = objSheet
            Set objSheet = Nothing
            Exit For
        End If
    Next
End Function

Gruß
Nepumuk
Anzeige
AW: Ansprechen Tabellenblatt über Codename (VBA)
03.09.2019 13:19:09
Ben
Hallo Nepomuk, danke für die Antwort! Das probiere ich nachher mal in Ruhe aus!
Gruß
Ben
Das Ansprechen eines Wb von einem anderen aus ...
03.09.2019 15:33:46
einem
…mit dessen Codenames setzt Folgendes voraus, Ben:
1. Alle internen (Code-)Namen (VBA-Project, DieseArbeitsmappe, Blätter) beider Mappen müssen eindeutig sein und dürfen nicht die ursprünglich gezeigten Default-Namen verwenden (anderenfalls ist 2. nicht möglich)!
2. Im den Ansprache-Code enthaltenden Wb muss ein Verweis auf das andere Wb gesetzt wdn, was dazu ebenfalls geöffnet sein muss (bzw geöffnet wird und nicht geschlossen wdn kann, solange das ansprechende Wb geöffnet ist)!
Das Verwenden des abgefragten CodeNames per Text-Variable ist aufwendiger, da einem so bezeichneten Blatt ein übergeordnetes Objekt (.Parent) fehlt. Genau deshalb ist auch 1. erforderlich (vgl Bsp)!
Bei Erfüllung der o.g. Voraussetzungen ist bspw folgende Abfrage in TestMappe2 möglich (TM1Tab1 ist der CodeName des 1.ArbBlattes von TestMappe1):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox TM1Tab1.Range(Target.Address)
End Sub
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt über Codename in Excel VBA ansprechen


Schritt-für-Schritt-Anleitung

Um ein Tabellenblatt in Excel VBA über seinen Codename anzusprechen, kannst du die folgenden Schritte befolgen:

  1. Öffne das VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke im Projekt-Explorer mit der rechten Maustaste auf VBAProject (deine Arbeitsmappe) und wähle Einfügen > Modul.

  3. Definiere eine Subroutine: Schreibe eine Subroutine, in der du das Tabellenblatt über den Codename ansprechen möchtest.

    Beispiel:

    Sub Beispiel()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.tbl_Lookup_Projektliste
       ' Weitere Aktionen mit ws
    End Sub
  4. Fehlerbehebung: Wenn du einen Laufzeitfehler erhältst, stelle sicher, dass der Codename korrekt ist und die Arbeitsmappe geöffnet ist.


Häufige Fehler und Lösungen

  • Laufzeitfehler 438: Dieser Fehler tritt auf, wenn du versuchst, ein Tabellenblatt über den Codename in einer anderen Arbeitsmappe anzusprechen. Um das zu umgehen, musst du eine Schleife verwenden, um die Arbeitsblätter zu durchsuchen.

  • Codename nicht gefunden: Stelle sicher, dass der Codename des Arbeitsblattes korrekt ist. Du kannst den Codename im VBA-Editor im Eigenschaftenfenster auf der linken Seite überprüfen.


Alternative Methoden

Wenn du den Codename nicht direkt verwenden kannst, kannst du auch eine Funktion erstellen, die das Tabellenblatt basierend auf dem Codename zurückgibt. Hier ist ein Beispiel:

Function GetSheetByCodename(ByVal pvstrCodeName As String, Optional ByRef oprWorkbook As Workbook = Nothing) As Worksheet
    Dim objSheet As Worksheet
    If oprWorkbook Is Nothing Then Set oprWorkbook = ThisWorkbook
    For Each objSheet In oprWorkbook.Sheets
        If objSheet.CodeName = pvstrCodeName Then
            Set GetSheetByCodename = objSheet
            Exit Function
        End If
    Next
    Set GetSheetByCodename = Nothing
End Function

Verwende diese Funktion, um das gewünschte Tabellenblatt zu erhalten.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du ein Tabellenblatt mit einem Codename ansprechen kannst:

  1. Einfaches Ansprechen:

    Sub Ansprechen()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.tbl_Lookup_Projektliste
       MsgBox ws.Range("A1").Value
    End Sub
  2. Mit Schleife:

    Sub AnsprechenMitSchleife()
       Dim ws As Worksheet
       For Each ws In ThisWorkbook.Worksheets
           If ws.CodeName = "tbl_Lookup_Projektliste" Then
               MsgBox ws.Range("A1").Value
               Exit For
           End If
       Next ws
    End Sub

Tipps für Profis

  • Vermeide Namenskonflikte: Stelle sicher, dass die Codenamen deiner Arbeitsblätter eindeutig sind, um Verwirrungen zu vermeiden.
  • Dokumentiere deinen Code: Verwende Kommentare, um den Code verständlicher zu machen, besonders wenn du mit Codenamen arbeitest.
  • Nutze Option Explicit: Füge Option Explicit am Anfang deiner Module hinzu, um sicherzustellen, dass alle Variablen deklariert werden.

FAQ: Häufige Fragen

1. Warum kann ich ein Tabellenblatt nicht direkt über den Codename ansprechen? Das direkte Ansprechen von Worksheets in anderen Workbooks über Codenamen ist nicht möglich. Du musst dies über eine Schleife tun.

2. Wie finde ich den Codename eines Tabellenblattes? Du kannst den Codename eines Arbeitsblattes im VBA-Editor im Eigenschaftenfenster sehen. Klicke auf das Blatt und schaue dir die Eigenschaften an.

3. Was ist der Unterschied zwischen Codename und Anzeigename? Der Codename ist der Name, der im VBA-Code verwendet wird, während der Anzeigename der Name ist, der in Excel sichtbar ist. Der Codename bleibt konstant, selbst wenn der Anzeigename geändert wird.

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