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

Forumthread: Range-Objekt in Array speichern möglich?

Range-Objekt in Array speichern möglich?
06.05.2020 02:52:35
Augustus
Hi
auf Suche nach Antwort auf die Frage, ob man ein Range-Objekt in eine Arrayzelle speichern und dann an anderer Stelle wieder abladen kann, habe ich folgendes ausprobiert:

Sub Test()
Dim arr  As Variant
ReDim arr(1, 1)
Set arr(1, 1) = Range("A1")
Set Range("C1") = arr(1, 1)
End Sub

Dieser Code lässt sich nicht einmal kompilieren, die letzte Zeile verhindert das, Wenn ich diese aber auskommentiere und den Code bis dorthin laufen lasse, sehe ich im Lokalfenster, dass in arr(1,1) doch was drinnen steht, Aber nicht geeignet, um es woanders hinhzukopieren,
Meine Frage ist nun, warum ist das so, und wie kann man das tun?
August
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range-Objekt in Array speichern möglich?
06.05.2020 03:14:37
Daniel
Hi
Range ist keine Objektvariable, Range ist das Objekt!
Wenn du arr(1, 1) so zugewiesen hast, kannst du es behandeln wie das Range-Objekt selbst.
Gruß Daniel
AW: Range-Objekt in Array speichern möglich?
06.05.2020 09:36:37
MRUTor
Hallo Augustus,
ein Wert wird nicht mit dem Befehl "Set" in eine Zelle geschrieben. Das ist was du hier machst. Also die letzte Zeile ohne Set:

Range("C1") = arr(1, 1)

Gruss Tor
Anzeige
AW: Range-Objekt in Array speichern möglich?
08.05.2020 00:18:37
Augustus
Hallo
ohne Set führt nicht zum Ziel, denn da wird ja nur der Value übertragen. Ich will die ganz Zelle mit all seinen Eigenschaften, so wie sie ja auch in arr(1, 1) stehen, übertragen.
AW: Range-Objekt in Array speichern möglich?
08.05.2020 01:26:24
GerdL
Moin August,
Rangeobjekte kann man kopieren.
Sub Test()
Dim arr  As Variant
ReDim arr(0, 0)
Set arr(0, 0) = Range("A1")
MsgBox TypeName(arr(0, 0))
arr(0, 0).Copy Range("C1")
End Sub

Gruß Gerd
Anzeige
AW: Range-Objekt in Array speichern möglich?
08.05.2020 02:10:02
Augustus
Danke. Super, funktioniert.
Muss ich mir merken, weil verstehen tu ich es nicht.
August
AW: Range-Objekt in Array speichern möglich?
10.05.2020 16:00:58
Augustus
Doch, verstehe ich.
Daniel hat ja geschrieben:
"Range ist keine Objektvariable, Range ist das Objekt!"
Das erklärt alles. Vielen Dank. Bye
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Range-Objekt in ein Array speichern und zurück übertragen


Schritt-für-Schritt-Anleitung

Um ein Range-Objekt in ein Array zu speichern und später wieder zu verwenden, kannst du die folgenden Schritte befolgen. Dieser Prozess wird häufig in Excel VBA verwendet, um Daten effizient zu verwalten.

  1. Erstelle ein neues Modul in deiner Excel-Arbeitsmappe.

  2. Füge den folgenden Code ein:

    Sub Test()
       Dim arr As Variant
       ReDim arr(0, 0)
       Set arr(0, 0) = Range("A1") ' Speichert das Range-Objekt in das Array
       MsgBox TypeName(arr(0, 0)) ' Überprüft den Typ des Objekts
       arr(0, 0).Copy Range("C1") ' Kopiert das Range-Objekt nach C1
    End Sub
  3. Führe das Makro aus. Du wirst feststellen, dass der Inhalt von Zelle A1 in Zelle C1 kopiert wird.


Häufige Fehler und Lösungen

  • Fehler: Kompilierungsfehler bei der Verwendung von Set.

    • Lösung: Du kannst Set nur verwenden, wenn du ein Objekt zuweist. Wenn du nur einen Wert übertragen möchtest, verwende Range("C1") = arr(0, 0) ohne Set. Beachte jedoch, dass dies nur den Wert überträgt und nicht das gesamte Range-Objekt.
  • Fehler: Fehlermeldung beim Kopieren eines Range-Objekts.

    • Lösung: Stelle sicher, dass du das Range-Objekt korrekt im Array gespeichert hast, bevor du versuchst, es zu kopieren.

Alternative Methoden

Neben der Verwendung eines Arrays gibt es auch andere Möglichkeiten, mit Range-Objekten in VBA zu arbeiten:

  • Direkte Zuweisung: Du kannst Werte direkt von einer Zelle in eine andere zuweisen, ohne ein Array zu verwenden:

    Range("C1") = Range("A1")
  • Verwendung von Collections: Du kannst auch eine Collection verwenden, um mehrere Range-Objekte zu speichern und zu verwalten.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, besser zu verstehen, wie du ein Range-Objekt in ein Array speichern und zurück übertragen kannst:

  1. Einzelnes Range-Objekt speichern und kopieren:

    Sub Beispiel1()
       Dim arr As Variant
       ReDim arr(0, 0)
       Set arr(0, 0) = Range("B2")
       arr(0, 0).Copy Range("D2")
    End Sub
  2. Mehrere Range-Objekte in einem Array speichern:

    Sub Beispiel2()
       Dim arr As Variant
       ReDim arr(0 To 1, 0 To 1)
       Set arr(0, 0) = Range("A1")
       Set arr(0, 1) = Range("B1")
       arr(0, 0).Copy Range("C1")
       arr(0, 1).Copy Range("D1")
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Fehler bei der Variablenzuweisung zu vermeiden.

  • Verstehe den Unterschied zwischen Set und =: Set wird für die Zuweisung von Objekten verwendet, während = für Werte verwendet wird.

  • Nutze das Lokalfenster: Es kann sehr hilfreich sein, die Werte und Objekte zu überprüfen, die in deinem Array gespeichert sind.


FAQ: Häufige Fragen

1. Kann ich ein ganzes Range-Objekt in ein Array speichern?
Ja, du kannst ein Range-Objekt in ein Array speichern, aber du musst darauf achten, wie du die Zuweisung vornimmst.

2. Was passiert, wenn ich Set in der falschen Weise benutze?
Wenn du Set fälschlicherweise für einen Wert verwendest, erhältst du einen Kompilierungsfehler. Stelle sicher, dass du Set nur für Objekte nutzt.

3. Wie kann ich mehrere Zellen in ein Array speichern?
Du kannst ein mehrdimensionales Array erstellen und mehrere Zellen darin speichern, indem du für jede Zelle eine separate Indizes verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige