Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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)
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
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: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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige