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

Range Variable in neuem Tabellenblatt einfügen

Forumthread: Range Variable in neuem Tabellenblatt einfügen

Range Variable in neuem Tabellenblatt einfügen
20.03.2025 17:28:49
Wallace
Hallo zusammen,
folgendes Problem:
Im Tabellenblatt Details stehen in mehreren Spalten Namen, Personalnummern, Arbeitsbereiche... . Diese Daten möchte ich in jeweils eigenen Variablen speichern und später in mehreren anderen Tabellenblättern wieder einfügen.

Bislang habe ich ich das ohne Variablen gelöst und das funktioniert auch:
    Range("B2").Select

Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("ArbBereich01Neu").Select
Range("A5").Select
ActiveSheet.Paste


Anschließend habe ich die weiteren Tabellenblätter mit Select ausgewählt und dort die Daten eingefügt.
Dann habe ich das gleiche mit den Personalnummern und all den anderen Spalten gemacht.

Nun habe ich mir vorgestellt, dass ich doch einfach die Daten aus den jeweiligen Spalten (Namen, PersNr., Arbeitsbereich, etc...) in entsprechenden Variablen speichere, das Ziel-Tabellenblatt auswähle und dort dann die Daten wieder einfüge. Klingt für mich eleganter :-)

Dim rngNamen As Range

Dim rngPersNr As Range
Dim rngArbb As Range
Set rngNamen = Tabelle13.Range("B2:" & Tabelle13.Range("B2").End(xlDown)).Value 'Tabelle13 ist "Details"
Set rngPersNr = Tabelle13.Range("C2:" & Tabelle13.Range("C2").End(xlDown)).Value
Set rngArbb = Tabelle13.Range("F2:" & Tabelle13.Range("F2").End(xlDown)).Value

With Tabelle1 'das Ziel-Tabellenblatt
.Range("A5") = rngNamen
.Range("B5") = rngPersNr
.Range("C5") = rngArbb
End With


Da kommt aber beim ersten "Set rngNamen..." 1004 Die Methode Range für das Objekt _Worksheet ist fehlgeschlagen.

Dann habe ich stattdessen folgendes ausprobiert (einen kleineren definierten Bereich):

Set rngNamen = Tabelle13.Range("B2:B20").Value


Da kommt 424 Objekt erforderlich...
Also entweder bin ich völlig auf dem falschen Dampfer, oder es geht nicht, oder ich hab keine Ahnung.

Interessant ist, wenn ich ".Value" jeweils dahinter weg lasse, dann läuft der Code durch. Es wird aber nichts eingefügt (vermutlich weil keine Werte in den Variablen sind...).

Wäre toll wenn mir jemand aus diesem super Forum mit super Usern helfen könnte.
Grüße
Wallace
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
20.03.2025 17:42:14
Alwin Weisangler
Hallo Wallace,

eine der Möglichkeiten:


Sub test()
Dim rng As Range
With Tabelle1
Set rng = .Range("B2:B" & .Cells(Rows.Count, 1).End(xlDown).Row)
End With
End Sub


Gruß Uwe
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 08:49:50
Wallace
Hallo Uwe,

habs versucht. Gibt mir aber leider nur "Laufzeitfehler '424': Objekt erfoderlich" zurück.

Ich versuch mal die Vorschläge der anderen User.

Danke
Grüße Wallace
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 09:06:04
MCO
Hey,

ich hoffe, du hast das Beispiel von Uwe auf deine Tabelle angepasst:

Sub test()

Dim rng As Range
With Tabelle13
Set rng = .Range("B2:B" & .Cells(Rows.Count, 2).End(xlDown).Row)
End With
End Sub


Gruß, MCO
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 09:34:09
Wallace
Danke =)
Hab aus der 1 die 2 gemacht, jetzt läuft der Code durch... allerdings wird auf Tabelle1 (Ziel) nichts eingefügt...

    With Tabelle13        'Daten holen

Set rngNamen = .Range("B2:B" & .Cells(Rows.Count, 2).End(xlDown).Row)
Set rngPersNr = rngNamen.Offset(0, -1)
Set rngOEn = rngNamen.Offset(0, 1)
Set rngZG = rngNamen.Offset(0, 27)
End With

With Tabelle1 'Daten wieder einfügen
.Range("A5") = rngNamen
.Range("B5") = PersNr
.Range("C5") = OEn
.Range("D5") = ZG
End With


Hab dann die Variablen als Variant deklariert (läuft erstmal) und zum Einfügen erst die Version von GerdL versucht:
    With Tabelle1

.Range("A5").Resize(UBound(rngNamen, 1), 1) = rngNamen
.Range("B5").Resize(UBound(rngPersNr, 1), 1) = rngPersNr
.Range("C5").Resize(UBound(rngOEn, 1), 1) = rngOEn
.Range("D5").Resize(UBound(rngZG, 1), 1) = rngZG
End With

Da kommt gleich "Laufzeitfehler '13': Typen unverträglich"

Mit der Version von daniel
Tabelle1.Range("A5").Resize(rngNamen.Rows.Count, rngNamen.Columns.Count).Value = rngNamen.Value


kommt "Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler"

Ich versuch jetzt mal eine Beispieldatei zu erstellen und lade die dann hoch.
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 09:56:54
Alwin Weisangler
Hallo Wallace,

Eine Rangevariable muss alle Elemente des Ranges enthalten, also nicht .Value.

Dann richtig so:


With Tabelle13
letzteZeile = .Cells(Rows.Count, 1).End(xlDown).Row
Set Rng = .Range("B2:B" & letzteZeile)
End With


Gruß Uwe
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
20.03.2025 17:56:12
daniel
Hi
beim Copy-Paste reicht es aus, beim Einfügen die Linke obere Zelle anzugeben.
wenn du die Werte jedoch so direkt übertragen willst, muss, der aufnehmende Zellbereich genauso groß sein wie der Bereich, aus dem du die Daten liest.

also entweder mit Copy-Paste
Hier um alles zu kopieren (Formate und ggf Formeln)

rngNamen.Copy Destination:=Tabelle1.Range("A5")


hier mit der Option, genauer auszuwählen, was kopiert und eingefügt werden soll (im Beispiel nur Werte):
rngNamen.Copy

Tabelle1.Range("A5").PasteSpecial xlpastevalues


für das, was du dir gedacht hast, musst du im Ziel die Größen anpassen:
Tabelle1.Range("A5").Resize(rngNamen.Rows.count, rngNamen.Columns.Count).value = rngNamen.Value


Gruß Daniel
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
20.03.2025 18:22:13
GerdL
Oder auch
Dim vntNamen As Variant

Dim vntPersNr As Variant
Dim vntArbb As Variant

With Tabelle13
vntNamen = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value 'Tabelle13 ist "Details"
vntPersNr = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)).Value
vntArbb = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp)).Value
End With

With Tabelle1 'das Ziel-Tabellenblatt
.Range("A5").Resize(UBound(vntNamen, 1), 1) = vntNamen
.Range("B5").Resize(UBound(vntPersNr, 1), 1) = vntPersNr
.Range("C5").Resize(UBound(vntArbb, 1), 1) = vntArbb
End With

Gruß Gerd
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 07:50:35
MCO
Moin!

Das es sich ja um irgendwelche Personaldaten handelt, gehe ich davon aus, dass alle Spalten die gleich Anzahl Zeilen haben.
Daher brauchst du den Bereich nur 1x ermitteln und kannst dann die Range einfach durch verschieben ermitteln:

    Set rngNamen = Tabelle13.Range("B2:" & Tabelle13.Range("B2").End(xlDown)).value   'Tabelle13 ist "Details"

Set rngPersNr = rngNamen.Offset(0, 1)
Set rngArbb = rngNamen.Offset(0, 4)


Der Übersicht halber würd ich es aber so schreiben:
    With Tabelle13

lz = .Range("B2").End(xlDown)
Set rngNamen = .Range("B2:" & lz).value 'Tabelle13 ist "Details"
Set rngPersNr = rngNamen.Offset(0, 1)
Set rngArbb = rngNamen.Offset(0, 4)
End With


Das Einfügen kannst du so lassen, meiner Meinung nach
With Tabelle1    'das Ziel-Tabellenblatt

.Range("A5") = rngNamen
.Range("B5") = rngPersNr
.Range("C5") = rngArbb
End With

Gruß, MCO
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 09:09:27
Wallace
Moin MCO,

hab folgendes versucht (entsprechend an meine Tabelle angepasst):

With Tabelle13

letzteZeile = .Range("B2").End(xlDown)
Set rngNamen = .Range("B2:B" & letzteZeile).Value
Set rngPersNr = rngNamen.Offset(0, -1)
Set rngOEn = rngNamen.Offset(0, 1)
Set rngZG = rngNamen.Offset(0, 27)
End With


Folgender Fehler kommt in der Zeile "Set rngNamen = .Range("B2:B" & letzteZeile).Value":
Laufzeitfehler '1004':
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen.

die Variablen habe ich zu Beginn so deklariert:
Dim ws As Worksheet

Dim rngNamen As Range
Dim rngPersNr As Range
Dim rngOEn As Range
Dim rngZG As Range


Der ganze Code (in einem Modul) wird über einen Button ausgeführt. Dieser befindet sich auf Tabelle13.

Ich versuche es weiter.
Grüße
Wallace
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 09:37:04
daniel
letzteZeile = .Range("B2").End(xlDown).Row

sonst bekommst du den Inhalt der letzten Zeilen in diese Variable und das wird nicht passen.

Gruß Daniel
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 10:19:06
Wallace
Habe jetzt mal eine Beispiel Datei erstellt… kann die aber nicht hochladen… Muss ich wohl später von daheim machen >:-[

Natürlich kann ich auch alle Spalten nacheinander kopieren und dann in den Tabellenblättern (im Original sind es fünf) einfügen, aber mir geht es in dem Fall auch darum, wie man einen flexiblen Bereich in eine Variable speichern kann, um diese dann woanders wieder einzufügen.

Grüße und vielen Dank schon mal für eure (bisherigen) Mühen!
Wallace
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 11:20:42
Wallace
Hallo zusammen,

ich verstehe es nicht, aber folgendermaßen klappt es nun:
Dim ws As Worksheet

Dim rngNamen As Range
Dim rngPersNr As Range
Dim rngOEn As Range
Dim rngZG As Range
Dim LastRow As Long

Set ws = Tabelle13

LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Set rngNamen = ws.Range("B2:B" & LastRow)
Set rngPersNr = ws.Range("A2:A" & LastRow)
Set rngOEn = ws.Range("C2:C" & LastRow)
Set rngZG = ws.Range("AC2:AC" & LastRow)

With Tabelle1
.Range("A5").Resize(rngNamen.Rows.Count, 1).Value = rngNamen.Value
.Range("B5").Resize(rngPersNr.Rows.Count, 1).Value = rngPersNr.Value
.Range("C5").Resize(rngOEn.Rows.Count, 1).Value = rngOEn.Value
.Range("D5").Resize(rngZG.Rows.Count, 1).Value = rngZG.Value
End With


Ich hab nicht erkannt, was ich jetzt anders gemacht hab, aber es funktioniert.

Danke für all eure Mühen und Gedanken!
Grüße Wallace
PS: Mein bisheriges VBA Wissen habe ich zu 95% aus diesem Forum! Ihr seid also echt super!!!
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 14:13:57
Piet
Hallo

ich habe nicht den ganzen Thread gelesen, aber deine letzte Antwort. Wo du fragst warum es funktioniert!

Ganz einfach, du hast vom Range her zwei gleiche Arrays gebaut. Teste es bitte einmal so, nur zum Spass.
Range("A1:A3".Value = Range("H1:H3").Value --> Schreibe die Test Werte in H1:H3 und starte das Makro.
Dann teste es mit diesem Code --> Range("A1").Resize(3, 1).Value = Range("H1:H3").Value

Resize vergrößert den Range Beereich und basiert auf (z, s) Basis. Erweitert Anzahl der Zeilen und Spalten.
Range("A1").Resize(3, 3).Select --> Selektiert dir den Bereich A1:C3. Jetzt das VBA System verstanden??

mfg Piet
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
21.03.2025 15:01:22
daniel
Hi
das hatte ich dir doch in meiner ersten Antwort erklärt:

wenn man einfach die Werte aus einem Bereich in den anderen Bereich mit "=" zuweisen will (Bereich2 = Bereich1), dann müssen beide Bereiche gleich groß sein, dh der Bereich in den die Werte geschrieben werden , muss genauso groß sein wie der Bereich, aus dem die Werte gelesen werden.
Diese Größenanpassung hast du vorher nicht gemacht und jetzt machst du sie.

nochmal zum Vergleich:
alt: .Range("A5") = rngNamen
neu: .Range("A5").Resize(rngNamen.Rows.Count, 1).Value = rngNamen.Value

das Resize macht hier den Unterschied, dadurch bringst du die Range("A5") auf die gleiche Größe wie rngNamen.

Gruß Daniel
Anzeige
AW: Range Variable in neuem Tabellenblatt einfügen
25.03.2025 14:35:27
Wallace
Danke Piet und Daniel. Ich denke ich habs verstanden!
Und Danke an alle anderen die mit gerätselt habe =)
Grüße
Wallace

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige