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

Tabellennamen in VBA

Forumthread: Tabellennamen in VBA

Tabellennamen in VBA
10.02.2003 15:16:53
Sven
Hallo liebe Forum`ler

habe folgendes Problem:

Habe ein Workbook mit 5 Sheets
Tabelle1(KW1)
Tabelle11 (KW2)
Tabelle111 (KW3)
Tabelle1111 (KW4) und
Tabelle11111 (KW5)

Die Bezeichnungnen in der Klammer ändern sich jeden Monat. Jetzt habe ich folgenden Code in Tabelle11:

Dim startZeit As Date
Dim endZeit As Date
startZeit = Sheets("KW1").Range("E50").Value
endZeit = Sheets("KW1").Range("E51").Value
...

Solbald ich den Name der Tabelle1 ändere geht der VBA-Code nicht mehr. Habe statt "KW1" auch schon "Tabelle1" versucht, geht aber auch nicht. Was mache ich falsch und wie geht es richtig?

Danke
Sven

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Re: Tabellennamen in VBA
10.02.2003 15:22:05
PeterW

Hallo Sven,

einfach Sheets(1), bzw. Sheets(11) ...

Gruß
Peter

Re: Tabellennamen in VBA
10.02.2003 15:22:22
RalfW

Hallo Sven,

da dein VBA-Code explizit den Namen der Tabellen verwendet, kann er auch nicht funktionieren, wenn du sie umbenennst.

Verwende besser die Indizies der Tabellen. Die bleiben beim Umbenennen konstant.

Also:

Dim startZeit As Date
Dim endZeit As Date
startZeit = Sheets(1).Range("E50").Value
endZeit = Sheets(1).Range("E51").Value

usw.

Viel Spaß
Ralf

Anzeige
RalfW hat Recht, ABER ...
10.02.2003 15:26:47
BerndL

Du darfst die Reihenfolge der Blätter nicht verändern.

MfG,
Bernd

Re: Tabellennamen in VBA
10.02.2003 15:56:55
kay.o

Hi,

du kannst das aber auch dynamisieren in dem du mit dem datetime die KW ermittelst.
ist die immer laufende KW jenigewelche die überschrift hat dann sowas.

...
blatt = "KW" & DateTime.DatePart("ww", datetime.now, 2, 1)
startZeit = Sheets(blatt).Range("E50").Value
endZeit = Sheets(blatt).Range("E51").Value
...

wie gesagt geht dann immer auf das blatt der jeweiligen waoche , da kannste auch hin und herschiben geht nie schief , es sei denn du bennenst die blätter falsch ;)

gruß
Kay

Anzeige
Re: RalfW hat Recht, ABER ...
10.02.2003 16:01:06
Steffan

Hallo,

Name und Index bei Tabellenblättern sind beide für VBA problematisch. (Namen bim Umbenennen der Blätter, Index beim Ändern der Reihenfolge). Stressfrei geht es nur bei Verwendung der Codenamen. Der steht im VBA-Editor im Eigenschaftsfenster im Feld '(Name)' und ist standarmäßig so wie der Tabellenname, wird aber beim Umbenennen der Tabelle nicht geändert (das geht nur im VBA-Eigenschaften-Fenster oder über VBA-Code: CodeName-Eigenschaft). Mittels Codenamen kann man auf Tabellenblätter wie Objekte zugreifen, also z.B. Tabelle1.Cells(1,1).Value="blablabla".

Steffan.


Anzeige
Re: Frage dazu ...
10.02.2003 16:29:13
BerndL

Hallo Steffan,
guter Tip, aber wie muß ich es anstellen, das ich dies auch mit einem bestimmtem WorkBook realisiert kriege?
Vielleicht hab' ich auch nur grad' 'nen Brett vor'm Kopp?!

Die kopiere1-SUB funzt nur, wenn ich in der With-Zeile das "WKB1." weglasse, hingegen meckern die anderen beiden Lösungen "Sheets("Tabelle1")" bzw. "Sheets(1)" nicht mit vorangestelltem "WKB1."

Besten Dank im voraus,
Bernd



Anzeige
Re: Frage dazu ...
10.02.2003 21:02:44
Otto Ecker

Hallo Bernd,

ganz einfach: Bei kopiere1 hast Du doppelt gemoppelt :-)

Du mußt das "set...usw" weglassen wenn Du mit dem "Tabelle1" als Objekt arbeitest. Ansonsten verwende Worksheets("Tabelle1")

Gruß Otto

Re: Und bei externen Zugriffen?
11.02.2003 08:22:26
BerndL

Hallo Otto,
danke, ABER wie mach ich es hier nur mit Tabelle1 ohne die anderen Lösungswege zu benutzen?
Oder geht's dann nicht.
Bei dem folgendem Bsp. erhalte ich "Laufzeitfehler 424".

MfG und Danke im Voraus,
Bernd



Anzeige
Re: Und bei externen Zugriffen?
11.02.2003 08:51:39
Steffan

Hallo Bernd,

versuch es mal so:

Steffan.

Na..., noch nicht so ganz.
11.02.2003 11:51:29
BerndL

Hi Steffan,
erstmal Danke für Deine Mühe, aber auch bei Deinem letzten Vorschlag darf der Blattname nicht ohne Makroanpassung verändert werden.

Ich bin bisher davon ausgegangen, daß ich - wenn AktiveMappe <> QuellMappe ist - immer auf auf die Quellmappe referenzieren muß (a'la Wkb1.Sheets("Quelle") oder Wkb1.Sheets(1)) und habe es daher auch mit Wkb1.Tabelle1 versucht.

JETZT
habe ich mir nochmal Otto's AW durch den Kopf gehen lassen und wirklich das Wkb1. weggelassen.
Siehe da, das Makro greift, obwohl AktiveMappe <> QuellMappe ist, doch auf die Tabelle1 der QuellMappe und nicht auf Die Tabelle1 von AktiveMappe zu.

WOBEI
ich sehr stark vermute: Es klappt nur wenn Quellmappe=MakroMappe ist.

Hier die Gegenüberstellung der 3 Verfahrensweisen (und danach eine abschließenden Frage):

Kennt einer ein Verfahren bei dem die ersten 3 Kommentarzeilen wie folgt aussehen würden:
'Vorteil: Tabelle1 in Wkb1 DARF umbenannt und DARF auch verschoben werden
'UND es ist das kürzeste Verfahren
'UND Makro brauch NICHT in der Datei sein, in der Tabelle1 ist

Besten Dank im Voraus,
Bernd









Anzeige
Kleine Korrektur zu "Na..., noch nicht so ganz"
11.02.2003 11:55:38
BerndL

Sorry,
im 3. Bsp. muß die eine Zeile natürlich NICHT so aussehen:
With Workbooks.Open("P:\Datei2.xls").Sheets("Tabelle1")
SONDERN so:
With Workbooks.Open("P:\Datei2.xls").Sheets("Ziel")

MfG,
Bernd

STOP, es klappt (Hab' mich verlesen, s. Text)
11.02.2003 12:14:02
BerndL

Hi Steffan,
sorry, sorry, sorry für meine Unterstellung in "Na..., noch nicht so ganz).

Wie heißt's so schön: "Wer lesen kann ist klar im Vorteil!"
Trifft auch mich wohl diesmal nicht zu :-(

Ich las c.Name, DOCH Du schriebst c.CodeName.

Nochmal Danke und Sorry,
Bernd

Anzeige
;
Anzeige

Infobox / Tutorial

Tabellennamen in VBA richtig verwenden


Schritt-für-Schritt-Anleitung

  1. Identifiziere die Tabellen: Wenn Du mit VBA arbeitest, solltest Du wissen, wie viele Tabellen in Deinem Workbook vorhanden sind. In diesem Fall hast Du 5 Tabellen.

  2. Verwende Indizes anstelle von Namen: Statt die Namen der Tabellen zu verwenden, ist es sinnvoller, die Indizes zu nutzen. Das bedeutet, dass Du die Tabelle mit Sheets(1) für die erste Tabelle ansprechen kannst, unabhängig vom Namen.

    Dim startZeit As Date
    Dim endZeit As Date
    startZeit = Sheets(1).Range("E50").Value
    endZeit = Sheets(1).Range("E51").Value
  3. Dynamische Namensgebung: Wenn Du die Namen der Tabellen dynamisch gestalten möchtest, kannst Du die aktuelle Kalenderwoche ermitteln. Hier ein Beispiel:

    Dim blatt As String
    blatt = "KW" & DateTime.DatePart("ww", Now(), vbMonday, vbFirstFourDays)
    startZeit = Sheets(blatt).Range("E50").Value
    endZeit = Sheets(blatt).Range("E51").Value

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 424: Dies tritt häufig auf, wenn Du versuchst, auf eine nicht existierende Tabelle zuzugreifen. Stelle sicher, dass die Tabelle mit dem angegebenen Namen oder Index vorhanden ist.

  • Problem mit umbenannten Tabellen: Wenn Du den Namen einer Tabelle änderst, funktioniert der ursprüngliche VBA-Code nicht mehr. Verwende stattdessen Indizes oder Codenamen, die nicht verändert werden, wenn der Tabellenname geändert wird.


Alternative Methoden

  • Verwendung von Codenamen: Eine weitere Möglichkeit ist die Nutzung von Codenamen im VBA-Editor. Diese bleiben konstant, auch wenn Du den Tabellennamen änderst. Du kannst auf die Tabelle dann wie folgt zugreifen:

    Tabelle1.Cells(1, 1).Value = "blablabla"
  • Über die Workbook-Referenz: Wenn Du auf ein bestimmtes Workbook zugreifen möchtest, kannst Du dies folgendermaßen tun:

    Workbooks("DeinWorkbook.xlsx").Sheets(1).Range("A1").Value = "Test"

Praktische Beispiele

  1. Zugriff auf eine Tabelle mit Index:

    Dim wert As Variant
    wert = Sheets(2).Range("B2").Value
  2. Zugriff auf eine Tabelle mit Codenamen:

    Tabelle2.Range("A1").Value = "Neuer Wert"
  3. Dynamische Ermittlung der aktuellen Kalenderwoche:

    Dim currentKW As String
    currentKW = "KW" & Format(DatePart("ww", Now(), vbMonday, vbFirstFourDays), "00")
    MsgBox "Aktuelle Kalenderwoche: " & currentKW

Tipps für Profis

  • Vermeide Namenskonflikte: Wenn Du mehrere Tabellen hast, achte darauf, dass die Namen nicht identisch sind. Das kann zu Verwirrung führen.

  • Nutze Kommentare: Dokumentiere Deinen Code mit Kommentaren, um Änderungen in der Zukunft leichter nachvollziehen zu können.

  • Teste regelmäßig: Führe regelmäßig Tests Deines VBA-Codes durch, besonders nach Änderungen an den Tabellen oder deren Namen.


FAQ: Häufige Fragen

1. Wie kann ich auf eine Tabelle zugreifen, wenn ich den Namen nicht kenne?
Du kannst die Indizes der Tabellen verwenden, um auf sie zuzugreifen, z.B. Sheets(1).

2. Was sind Codenamen und wie nutze ich sie?
Codenamen sind die Namen, die im VBA-Editor für Tabellen verwendet werden. Du kannst sie im Eigenschaftenfenster finden und wie folgt verwenden: Tabelle1.Range("A1").Value.

3. Was mache ich, wenn ich einen Laufzeitfehler erhalte?
Überprüfe, ob die Tabelle, auf die Du zugreifen möchtest, tatsächlich existiert und ob der Name oder Index korrekt ist.

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