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

Range als Variable speichern

Forumthread: Range als Variable speichern

Range als Variable speichern
09.02.2004 20:21:40
Markus
Hallo zusammen
Habt ihr eine Idee (Ahnung)wie ich untenstehende Markierung speichern könnte?
Rows(Zellenanf & ":" & rowy).Cut
Diesen Zeilenbereich möchte ich zwischenspeichern.
Weil die Zwischenablage weiterbenutzt wird und nichts mehr drinsteht bis
ich die Daten brauche.
Gruss Markus
Anzeige

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range als Variable speichern
09.02.2004 20:35:29
andre
hallo markus,
den bereich hast du doch schon mit den variablen. da schneidest du es später aus.
oder brauchst du die daten? dann lege sie irgendwo hin, wo sich gerade nichts tut.
gruss andre
AW: Range als Variable speichern
09.02.2004 20:46:36
Markus
Hallo Andre
Ja ich brauch die Daten.
Ich hab mir gedacht ich könnte den Bereich in eine Variable speichern.
Weil in der Zwischenzeit andere Kopier und Einfügebefehle erfolgen.
Gruss Markus
Anzeige
AW: Range als Variable speichern
09.02.2004 20:38:48
Heinz A. Wankmüller
Hallo Markus,
so z.B.

Sub MarkSichern()
Dim rng As Range
Set rng = Rows(Zellenanf & ":" & rowy)
End Sub

Gruß
Heinz
AW: Range als Variable speichern
09.02.2004 20:55:12
Josef Ehrensberger
Hallo Markus!
Die Daten kannst Du in ein Array schreiben und darauf
wieder zugreifen.
Beispiel:


Sub beispiel()
Dim myArr() As Variant
myArr = Rows(Zellenanf & ":" & rowy).Value
Rows("15:24") = myArr
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

Gruß Sepp
Anzeige
AW: Range als Variable speichern
09.02.2004 21:15:52
Markus
Hallo Sepp
Sieht gut aus. Bei mir kommmt aber der Fehler 13 Typen unverträglich.
Dim arr() As Variant
arr = Rows(Zellenanf & ":" & rowy)
Hast du eine Idee
Gruss Markus
.Value !
09.02.2004 21:30:39
Josef Ehrensberger
Hallo Markus!
Du hast das .Value vergessen.
arr = Rows(Zellenanf & ":" & rowy).Value
Gruß Sepp
Anzeige
AW: .Value !
09.02.2004 21:50:55
Markus
Hallo Sepp
ok.es funzt. aber nur bis zur Zuweisung.
Aber...
Vorher hab ich das so gemacht:
Rows(Adress & ":" & Adress).Select
Selection.Insert Shift:=xlDown 'kopierte Zellen werden eingefügt
Wenn ich jetzt den Range zuweise,
Code: Rows(Adress & ":" & Adress).Value = arrSchrittAusschneiden
werden doch jetzt die unteren Zeilen überschrieben oder? Und diese sollte aber nach unten verschoben werden.
Cool wäre es wenn ich das Array wieder in die Zwischenablage kriegen würde.
Gruss Markus
Anzeige
AW: .Value !
09.02.2004 22:04:26
Josef Ehrensberger
Hallo Markus!
Die zwischenablage brauchst Du nicht!
Einfach die Zeilen erst einfügen, dann füllen.
Rows(Adress & ":" & Adress).Insert (xlShiftDown)
Rows(Adress & ":" & Adress).Value = arrSchrittAusschneiden
Gruß Sepp
AW: .Value !
09.02.2004 22:16:07
Markus
Hallo Sepp
Aber auf diese Weise füge ich ja nur die eine Zeile ein.
Und gefüllt wird dann auch nur diese eine.
Eigentlich markiere ich mit Rows(Adress & : & Adress) diese eine Zeile.
Und nun konnte ich vorher hier die Zwischenablage einfügen mit "kopierte Zeilen einfügen".
Gruss Markus
Anzeige
AW: .Value !
09.02.2004 22:23:25
Josef Ehrensberger
Hallo Markus!
Ich glaube jetzt, wie Boris, das es besser wäre Du würtest
uns erklären was Du erreichen willst, und am besten den Code
Posten.
Gruß Sepp
AW: Range als Variable speichern
09.02.2004 21:00:24
Markus
Hallo Heinz
Danke für den Tipp.
Und wie kann ich den Range wieder in die Zwischenablage kopieren.....vielleicht so?
'in die Zwischenablage laden
Dim Mydata As DataObject
Set Mydata = rng
Mydata.PutInClipboard
Gruss Markus
Anzeige
Grundsatzfrage: Warum überhaupt Kopieren?
09.02.2004 21:56:52
Boris
Hi Markus,
was kopierst du da eigentlich? Ich wage mal zu behaupten, dass es eine 100 mal einfachere und elegantere Lösung als diese Kopiererei gibt...
Gib mal ein paar mehr Infos.
Grüße Boris
AW: Grundsatzfrage: Warum überhaupt Kopieren?
09.02.2004 22:07:44
Markus
Hallo Boris
Ich möchte eine Bereich kopieren oder ausschneiden und in dann später an einen
definierten Bereich (z.B. Rows(Adress & : & Adress)einfügen. Unter der neuen Einfügezeile stehen bereits Daten die nach unten müssen. Geht gut mit "kopierte Zellen eifnügen.
Dass Ganze wäre eigentlich einfach weil die Daten in Zwischenablage liegen.
Nur wird eben diese zwischenzeitlich überschrieben.
Gruss Markus
Anzeige
Ich bleibe dabei: Kopieren ist überflüsig...
09.02.2004 22:10:55
Boris
Hi Markus,
...und zudem ist es "unprofessionell", mit der Zwischenablage zu arbeiten, die man auch noch 100 Aktionen mit sich rumschleppt.
Schilder doch einfach mal dein Problem bzw. die Aufgabenstellung - und das Kopieren wird zu 99% ein Ende haben...
Grüße Boris
AW: Ich bleibe dabei: Kopieren ist überflüsig...
09.02.2004 22:23:37
Markus
Hallo Boris, ok
Ich wähle über eine Listbox in einem Userform Einträge aus die ich ausschneiden möchte.
Hinter den Einträgen sind Daten in Tabellenform.
Wo die Daten sind berechne ich.
In einer anderen Listbox auf der gleichen Userform möchte ich die Daten über den markierten Eintrag einfügen. Auch hier stehen Daten in Tabellenform hinter den Einträgen.
Dass heisst ich muss schauen wo ich den ausgeschnittenen Bereich einfügen kann. Also meine Adresse z.B Rows(Adress & : & Adress),ab hier kann ich also einfügen.
Es ist ein bisschen wirre , aber ich hoffe du kannst was damit anfangen.
Gruss Markus
Anzeige
Ohne deine Datei und Dein Userform wird das nix...
09.02.2004 22:29:37
Boris
Hi Markus,
...lade deine Datei hoch und beschreibe examplarisch, was wann und wo passieren soll. Dann erhälst du sicherlich einen gut funktionierenden Code.
Grüße Boris
AW: Ohne deine Datei und Dein Userform wird das nix...
09.02.2004 22:33:49
Markus
ok Boris,Sepp
Meine Datei hat ca.4MB und ich eine lahme analog - Verbindung.
Aber vielleicht mach ich Morgen weiter....ich geh mal langsam in die Federn.
Gruss Markus
Vielen Dank für euere Bemühungen.
p.s. Grundsätzlich möchte ich eigentlich nur einen Range an einer markierten Zeile als kopierte Zeilen einfügen.....*grins*
Anzeige
Dann bastel doch schnell ein kleines Beispiel..
09.02.2004 22:37:16
Boris
Hi Markus,
...das so ca. 40 KB groß ist - ein kleines Userform mit 2 Listboxes - und womöglich 2 RowSources. Und dann: Was soll soll wann und wo passieren?
Grüße Boris
AW: Dann bastel doch schnell ein kleines Beispiel..
09.02.2004 22:39:09
Markus
ok Boris.
Wenn ich wirklich nicht weiterkommen sollte komme ich auf dich zurück.
Gruss Markus
Workout...
09.02.2004 22:40:46
Boris
Hi Markus,
...alles klar - ich habe verstanden...;-)
Grüße Boris
Anzeige
AW: Ohne deine Datei und Dein Userform wird das nix...
09.02.2004 22:37:33
Josef Ehrensberger
Hallo Markus!
Vieleicht ein Ansatz ohne Copy & Paste.


Sub test()
Dim rng As Range
Dim intC As Integer
Dim start As Integer
start = 10  'Zeile ab der Eingefügt werden soll
Set rng = Rows("2:5")
intC = rng.Rows.Count - 1
Rows(start & ":" & start + intC).Insert (xlShiftDown)
Rows(start & ":" & start + intC).Value = rng.Value
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

Gruß Sepp
Anzeige
AW: Ohne deine Datei und Dein Userform wird das nix...
10.02.2004 05:48:48
andre
hallo markus,
dann bleibt entweder meine zuerst genannte variante mit dem zwischenspeichern irgendwo, oder du musst neben den inhalten bzw. formeln auch noch alle formatinformationen in einem array oder wo auch immer zwischenspeichern, sonst gehen die je nachdem was du mit dem quellbereich machst, verloren und es ist nicht dasselbe wie bei kopierte zellen einfügen. und wenn du im quellbereich formeln hattest und die in den zielbereich bringst kann ja auch was anderes rauskommen als im quellbereich ..
gruss andre
Anzeige
Ist es dir zu fein, drauf zu antworten?
09.02.2004 22:07:57
Boris
OK - nehme das zurück - hatte nur den..
09.02.2004 22:08:37
Boris
...leeren Betreff gesehen...
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Range als Variable speichern in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Bereich definieren: Du kannst einen Bereich (Range) in Excel VBA als Variable speichern, indem du eine Variable vom Typ Range deklarierst.

    Dim rng As Range
    Set rng = Rows("1:10") ' Beispiel: Zeilen 1 bis 10
  2. Wert der aktiven Zelle speichern: Wenn du den Wert der aktiven Zelle in einer Variable speichern möchtest, kannst du dies wie folgt tun:

    Dim aktZelle As Variant
    aktZelle = ActiveCell.Value
  3. Bereich in eine Variable speichern: Um einen spezifischen Bereich in einer Variable zu speichern, kannst du den folgenden Code verwenden:

    Dim rng As Range
    Set rng = Range("A1:C10") ' Beispiel: Bereich von A1 bis C10
  4. Zugriff auf Werte: Um auf die Werte des gespeicherten Bereichs zuzugreifen, kannst du rng.Value verwenden:

    Debug.Print rng.Value ' Gibt die Werte des Bereichs in der Konsole aus

Häufige Fehler und Lösungen

  • Fehler 13 - Typen unverträglich: Dieser Fehler tritt häufig auf, wenn du versuchst, einen Bereich ohne die .Value-Eigenschaft in ein Array zu speichern.

    • Lösung: Stelle sicher, dass du .Value verwendest, wenn du den Bereich zuweist:
      Dim myArr As Variant
      myArr = rng.Value
  • Problem mit ActiveCell: Manchmal kann es sein, dass die aktive Zelle nicht den erwarteten Wert hat.

    • Lösung: Überprüfe, ob die Zelle tatsächlich aktiv ist und den richtigen Wert enthält, bevor du sie speicherst.

Alternative Methoden

  • Speichern in einem Array: Anstatt den Bereich in einer Range-Variablen zu speichern, kannst du die Werte direkt in ein Array schreiben. Dies kann hilfreich sein, wenn du viele Daten gleichzeitig verarbeiten möchtest.

    Dim myArr As Variant
    myArr = Range("A1:C10").Value
  • Verwendung der Zwischenablage: Wenn du den Bereich in die Zwischenablage kopieren möchtest, kannst du die DataObject-Klasse verwenden.

    Dim Mydata As New MSForms.DataObject
    Mydata.SetText rng.Value
    Mydata.PutInClipboard

Praktische Beispiele

  • Beispiel: Bereich ausschneiden und einfügen:

    Sub AusschneidenUndEinfügen()
      Dim rng As Range
      Set rng = Rows("1:10")
      rng.Cut Destination:=Rows("11") ' Fügt den Bereich in Zeile 11 ein
    End Sub
  • Beispiel: Werte in eine andere Zelle kopieren:

    Sub WerteKopieren()
      Dim rng As Range
      Set rng = Range("A1:A10")
      Range("B1:B10").Value = rng.Value ' Kopiert Werte von A nach B
    End Sub

Tipps für Profis

  • Verwende With-Anweisungen: Um den Code lesbarer zu machen und redundante Schreibarbeit zu vermeiden, kannst du die With-Anweisung verwenden:

    With rng
      .Value = .Value * 2 ' Verdoppelt alle Werte im Bereich
    End With
  • Verwalte Fehler mit On Error: Implementiere Fehlerbehandlung, um unerwartete Probleme zu vermeiden:

    On Error Resume Next
    Set rng = Range("A1:C10")
    If Err.Number <> 0 Then
      MsgBox "Der Bereich konnte nicht gesetzt werden."
    End If

FAQ: Häufige Fragen

1. Wie speichere ich einen Bereich als Variable in Excel VBA? Um einen Bereich als Variable zu speichern, kannst du den folgenden Code verwenden:

Dim rng As Range
Set rng = Range("A1:C10")

2. Kann ich den Wert der aktiven Zelle in einer Variable speichern? Ja, du kannst den Wert der aktiven Zelle wie folgt speichern:

Dim aktZelle As Variant
aktZelle = ActiveCell.Value

3. Was ist der Unterschied zwischen Set und Dim? Dim wird verwendet, um eine Variable zu deklarieren, während Set verwendet wird, um ein Objekt (wie einen Bereich) einer Variablen zuzuweisen.

4. Wie kann ich einen Bereich in die Zwischenablage kopieren? Du kannst den Bereich in die Zwischenablage kopieren, indem du die DataObject-Klasse verwendest:

Dim Mydata As New MSForms.DataObject
Mydata.SetText rng.Value
Mydata.PutInClipboard

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