Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1296to1300
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

Dim x(1 To 200) As Range möglich?

Dim x(1 To 200) As Range möglich?
07.02.2013 09:36:50
Kerem
Hallo,
ich möchte in einer Schleife bestimmte Zeilen in Range-Variablen abspeichern und sie später (sortiert) wieder einfügen.
Dafür habe ich Dim rngZeilen(1 To 200) As Range deklariert und in einer Schleife wie der folgenden bestimmte Zeilen abgespeichert:
For x = 1 to 200
Set rngZeilen(x) = Sheets("Tabelle1").Rows(a & ":" & b)
Next x
Ein Fehler ("Objekt erforderlich") kommt wenn ich die abgespeicherten Zeilen wieder einfügen möchte:
For x = 1 to 200
rngZeilen(x).Copy Cells(LastRowNeu + 1, 1)
Next x
Die Fehlermeldung deutet ja schon darauf hin dass der Fehler an der Deklaration Dim rngZeilen(1 To 200) As Range liegt aber wie könnte ich sonst Zeilen unabhängig voneinander (wegen sortieren) abspeichern?
Das Makro ist unfertig und unübersichtlich deswegen habe ichs hier mal nicht eingefügt. Falls es Fragen gibt bitte fragen... Stundenlange Suche haben mich nicht weitergebracht. Ich hoffe hier kann man mir helfen.
Gruß
Kerem

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dim x(1 To 200) As Range möglich?
07.02.2013 09:55:25
GuentherH
Hallo Kerem,
Die Codeschnipsel weisen jeder Variablen den gesamten Bereich von zeile a bis b zu!?.
Der Fehler dürfte im Cells liegen
probier mal
rngZeilen(x).Copy Activesheet.Rows(LastRowNeu + 1)
praktisch wäre in so einem Fall auch eine Datei upzuloaden, die man direkt debuggen kann.
Gruß,
Günther

AW: Dim x(1 To 200) As Range möglich?
07.02.2013 10:28:39
Kerem
Hallo Günther, leider kommt da der Fehler "Anwendungs- oder Objektdefinierter Fehler".
Ich lade eine Testdatei hoch.
Habe zum besseren Verständnis Kommentare eingefügt und mit Einzelschritten sollte es klar sein wie es funktioniert.
Wie gesagt das Makro ist noch lange nicht fertig (und wahrscheinlich voll von kleinen Fehlern). Außerdem ist die Sortierfunktion noch gar nicht eingebaut. Die Zeilen müssten also nach Makro dieselbe Reihenfolge haben wie vorher.
https://www.herber.de/bbs/user/83808.xlsm

Anzeige
AW: Dim x(1 To 200) As Range möglich?
07.02.2013 15:13:55
Kerem
Ich glaube ich hätte das Kontrollkästchen aktivieren müssen, dass die Frage noch offen ist. Mach ich hiermit.
Zum Problem: Es scheint nichts mit dem 1 To 200 Range zu tun zu haben sondern generell mit Range. Also auch folgendes funktioniert nicht:

With Sheets("Teilestückliste")
Set rngBackup = .Rows(5)                            'speichern
.Rows("5:" & LastRow + 25).Delete Shift:=xlUp       'löschen
rngBackup.Copy Cells(5, 1)                          'einfügen

Beim einfügen wieder der Fehler "Objekt erforderlich".
In meinem zweiten Post habe ich eine Beispieldatei mit Makro hochgeladen... Bitte um Hilfe...

Anzeige
AW: Dim x(1 To 200) As Range möglich?
07.02.2013 16:35:19
GuentherH
Hallo Kerem,
ich sehe das so, dass Du mit
.Rows("5:" & LastRow + 25).Delete Shift:=xlUp
alle deine Inhalte löschst, und eine grundlegend andere Möglichkeit zum Sortieren wählen musst.
Gruß,
Günther

AW: Dim x(1 To 200) As Range möglich?
07.02.2013 17:02:43
Kerem
Hallo Günther, scheinbar liegt es tatsächlich daran. Wenn ich den Inhalt von rngBackup nämlich in einem anderen Tabellenblatt einfügen lasse klappt es nämlich.
Ich verstehe aber nicht wieso es daran liegt. Ich speichere meine Zeilen doch bevor ich die Inhalte lösche und müsste doch danach mit rngXxx.Copy alles wieder einfügen können?
Weißt Du wie ich sonst alles löschen und die Ranges wieder einfügen kann? Oder wie die andere Möglichkeit zum sortieren aussehen könnte?

Anzeige
AW: Dim x(1 To 200) As Range möglich?
08.02.2013 08:43:05
GuentherH
Hallo Kerem,
entscheidend ist, wie Michi auch geschrieben hat, dass das Range-objekt nicht die Daten, sondern nur den Verweis auf die Zellen beinhaltet. Für eine Sortierung im Code müsste also eine Sortierte Kopie an anderer Stelle geschrieben, und danach erst über die Originaldaten kopiert werden.
ich würde allerdings eher die SORT-Methode bemühen.
das würde z.b. so aussehen:
Sub srt()
Range("A4:U17").Sort Range("a4"), xlAscending, Range("C4"), , xlAscending, _
Header:=xlYes, MatchCase:=False, SortMethod:=xlPinYin, dataoption1:=xlSortTextAsNumbers, _
dataoption2:=xlSortTextAsNumbers
End Sub

Gruß,
Günther

Anzeige
AW: Dim x(1 To 200) As Range möglich?
08.02.2013 13:58:01
Kerem
ok ich verstehe, das heißt ich müsste einen kleinen Umweg über einen neuen Arbeitsblatt gehen, das nachher gelöscht wird.
Dachte immer range speichert die jeweiligen Zellen anstatt nur auf sie zu zeigen... schade eigentlich.
Die Sort-Methode würde aber leider die leeren Zellen (Zeilen ohne Pos.nummer) ans Ende schieben.
Aber jetzt ist mir klar wie ich mein Problem lösen muss.

AW: Dim x(1 To 200) As Range möglich?
07.02.2013 12:17:26
Michael
Hallo Kerem.
Eine mögliche Lösung (habs nicht getestet):
Dim rngZeilen(1 To 200) As String
For x = 1 to 200
Set rngZeilen(x) = Sheets("Tabelle1").Rows(a & ":" & b).Address
Next x
For x = 1 to 200
Sheets("Tabelle1").Range(rngZeilen(x)).Copy Cells(LastRowNeu + 1, 1)
Next x
VBA speichert hier nicht als Bereich, sondern nur die Addresse des Bereichs
  • z.B. Range("A4").Address = "$A$4"

  • z.B. Range("A4:X4").Address = "$A$4:$X$4"

  • Dieser wird dann wieder für das Kopieren herangezogen.
    HTH
    Michi

    Anzeige
    AW: Dim x(1 To 200) As Range möglich?
    07.02.2013 13:23:46
    Kerem
    Hallo Michael, leider kommt in der Zeile dann der Fehler "Objekt erforderlich". Trotzdem danke für den Vorschlag. Deine Idee würde wohl klappen, wenn ich die gespeicherten Zeilen in einem anderen Arbeitsblatt dann wieder zusammenfüge aber eigentlich wollte ich nach der Speicherung alles löschen und dann wieder füllen. Also alles im selben Arbeitsblatt.

    314 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige