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

Range in anderem Tabellenblatt

Forumthread: Range in anderem Tabellenblatt

Range in anderem Tabellenblatt
16.08.2014 09:04:55
Thomas
Guten Morgen,
ich habe in einer Prozedur für Tabelle1(Tabelle1) unten stehenden - einfachen - code.
Ich möchte einen dynamischen Bereich (Range) aus Tabelle 2 erstellen. Wo der Laufzeitfehler 1004 auftritt habe ich im code markiert. Der Code ist nur eine vereinfachte Version um zur Problemlösung zu kommen. Ich danke für Ideen, Anregungen und Hilfestellungen.
Private Sub ComboBox1_Change()
Dim wb As Workbook
Dim wks_d As Worksheet, wks_v As Worksheet
Dim rng_bereich As Range
Dim lng_ezeile As Long, lng_lzeile As Long, lng_spalte As Long
Set rng_bereich = Nothing
lng_lzeile = 0
Set wb = Application.ActiveWorkbook
Set wks_d = wb.Sheets("Tabelle2")
Set wks_v = wb.Sheets("Tabelle1")
lng_ezeile = 3
lng_lzeile = 19
lng_spalte = 3
lng_lzeile = wks_d.Cells(Rows.Count, lng_spalte).End(xlUp).Row
'hier tritt der Laufzeitfehler 1004 auf
'offensichtlich kann man kein .Range auf ein anderes Tabellenblatt stellen
'Aktiv ist das Sheet Tabelle1.
'Ich möchte jedoch nicht Sheets(Tabelle2).Activate verwenden
'Da verschiedene Prozeduren mit Workbook_Activate() losgetreten werden
Set rng_bereich = wks_d.Range(Cells(lng_ezeile, lng_spalte), Cells(lng_lzeile, lng_spalte))
End Sub

LG thowe

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 09:20:44
Hajo_Zi
cells bezieht sich auf wks_d aber Rows auf die aktuelle Tabelle.

AW: Range in anderem Tabellenblatt
16.08.2014 09:31:11
Thomas
danke Hajo für die Antwort
Ja, das stimmt: Cells soll/muss sich auf wks_d beziehen.
Woraus schließt du dass sich .Rows auf die aktuelle Tabelle (also aktive Tabelle, das ist .Sheet("Tabelle1")) bezieht...?
Was übersehe ich hier, kapiere ich hier nicht...?
Bitte nochmals um kurze Hilfestellung, Danke....

Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 09:35:26
Hajo_Zi
da vor Rows keine Tabelle steht oder habe ich das übersehen?
Gruß Hajo

AW: Range in anderem Tabellenblatt
16.08.2014 09:43:05
Thomas
Hallo Hajo,
danke nochmals. Ich kapiere es nicht...!!!!
meinst du hier?
....
Set rng_bereich = wks_d.Range(Cells(lng_ezeile, lng_spalte), Cells(lng_lzeile, lng_spalte))
....
Wenn ja, wie müsste die Zeile aussehen...?
Wenn nein, wo müsste ich was/wie ändern...?
Offensichtlich bist du dem Problem schon sehr nahe...
Bitte um "konkrete" Hilfestellung.
Vielen herzlichen Dank
LG thowe

Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 09:47:19
Hajo_Zi
mit meinen Antworten beziehe ich mich auf das was im Beitrag steht
lng_lzeile = wks_d.Cells(Rows.Count, lng_spalte).End(xlUp).Row
'hier tritt der Laufzeitfehler 1004 auf

Ich erstelle die Lösung für das was im Beitrag dargestellt wurde. Wird diese Darstellung geändert, überlasse ich anderen die Lösung, da ich schon eine Lösung erstellt hatte und dafür Zeit investiert habe. Ich arbeite nicht für den Papierkorb.
Gruß Hajo

Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 10:02:59
Thomas
Hallo Hajo,
dein Hinweis hat schon gereicht.
Nochmals herzlichen Dank.
Konnte mir nicht vorstellen das ich vor Cells(..,..) nocheinmal das Worksheet vorstellen muss.
Nun klappt es. Offensichtlich muss die Lösung so lauten:
Sub ComboBox1_Change()
Set rng_bereich = wks_d.Range(wks_d.Cells(lng_ezeile, lng_spalte), wks_d.Cells(lng_lzeile,  _
lng_spalte))
End Sub

Recht herzlichen Dank nochmal!
LG thowe

Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 10:37:34
Luschi
Hallo thowe,
so ist es auch korrekt:

With wks_d
Set rng_bereich = .Range(.Cells(lng_zeile, lng_spalte), .Cells(lng_lzeile, lng_spalte))
End With
Gruß von Luschi
aus klein-Paris
PS: beachte dabei die Punkte vor Range & Cells

Anzeige
AW: Range in anderem Tabellenblatt
16.08.2014 10:46:23
Thomas
Danke Luschi,
habe inzwischen auf deine Lösung umgestellt gehabt....
Nochmals Danke!
LG thowe

AW: Range in anderem Tabellenblatt
16.08.2014 18:16:53
Adis
Hallo Luschi
Wo ist Klein Paris?
Gruss Adis

;
Anzeige
Anzeige

Infobox / Tutorial

Range in anderem Tabellenblatt in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA auf ein anderes Tabellenblatt zuzugreifen und einen dynamischen Bereich (Range) zu erstellen, kannst Du folgende Schritte befolgen:

  1. Workbook und Worksheet definieren: Beginne mit der Definition des Workbook und der Worksheets, auf die Du zugreifen möchtest.

    Dim wb As Workbook
    Dim wks_d As Worksheet, wks_v As Worksheet
    Set wb = Application.ActiveWorkbook
    Set wks_d = wb.Sheets("Tabelle2")
    Set wks_v = wb.Sheets("Tabelle1")
  2. Zeilen und Spalten festlegen: Definiere die Zeilen und Spalten, die Du verwenden möchtest.

    Dim lng_ezeile As Long
    Dim lng_lzeile As Long
    Dim lng_spalte As Long
    lng_ezeile = 3
    lng_spalte = 3
    lng_lzeile = wks_d.Cells(Rows.Count, lng_spalte).End(xlUp).Row
  3. Dynamischen Range erstellen: Um den Range korrekt zu erstellen, musst Du sicherstellen, dass Du das Worksheet in den Cells-Referenzen angibst.

    Dim rng_bereich As Range
    Set rng_bereich = wks_d.Range(wks_d.Cells(lng_ezeile, lng_spalte), wks_d.Cells(lng_lzeile, lng_spalte))

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn Du versuchst, Cells ohne Bezug auf das passende Worksheet zu verwenden. Verwende immer wks_d.Cells(...), um sicherzustellen, dass Du auf das richtige Tabellenblatt zugreifst.

  • Aktives Blatt: Wenn Du Rows.Count ohne ein Worksheet angibst, bezieht sich das auf das aktive Blatt. Achte darauf, dass Du auch hier das Worksheet angibst.


Alternative Methoden

Eine alternative Methode, um den Range zu erstellen, ist die Verwendung der With-Anweisung. Dies kann den Code übersichtlicher machen:

With wks_d
    Set rng_bereich = .Range(.Cells(lng_ezeile, lng_spalte), .Cells(lng_lzeile, lng_spalte))
End With

Praktische Beispiele

Angenommen, Du möchtest eine ComboBox verwenden, um Daten aus einem anderen Tabellenblatt zu füllen:

Private Sub ComboBox1_Change()
    Dim wb As Workbook
    Dim wks_d As Worksheet
    Dim rng_bereich As Range
    Set wb = Application.ActiveWorkbook
    Set wks_d = wb.Sheets("Tabelle2")

    ' Definiere die Zeilen und Spalten
    Dim lng_ezeile As Long, lng_lzeile As Long, lng_spalte As Long
    lng_ezeile = 3
    lng_spalte = 3
    lng_lzeile = wks_d.Cells(Rows.Count, lng_spalte).End(xlUp).Row

    ' Setze den Range
    Set rng_bereich = wks_d.Range(wks_d.Cells(lng_ezeile, lng_spalte), wks_d.Cells(lng_lzeile, lng_spalte))

    ' Fülle die ComboBox
    Dim cell As Range
    For Each cell In rng_bereich
        Me.ComboBox1.AddItem cell.Value
    Next cell
End Sub

Tipps für Profis

  • Nutze die With-Anweisung, um den Code leserlicher zu gestalten und die Ausführungsgeschwindigkeit zu erhöhen.
  • Überprüfe immer, ob das angegebene Worksheet existiert, um Laufzeitfehler zu vermeiden.
  • Halte Deinen Code modular, indem Du häufig genutzte Routinen in separate Subs oder Functions auslagerst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich auf das richtige Tabellenblatt zugreife?
Verwende immer den Namen des Worksheets, wenn Du auf Cells oder Range zugreifst, z.B. wks_d.Cells(...).

2. Was ist der Unterschied zwischen Cells und Range?
Cells bezieht sich auf eine bestimmte Zelle, während Range einen Bereich von Zellen definiert. Achte darauf, dass Du Range immer in Verbindung mit einem Worksheet verwendest, um Verwirrung zu vermeiden.

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