Office: (Office 2010) Range in Variable schreiben und Variable zurück in Zellen kopieren

Helfe beim Thema Range in Variable schreiben und Variable zurück in Zellen kopieren in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, Ich habe mir ein Makro geschrieben das bei nem Button-Click Zellenwerte von Zelle B nach A überschreibt. Nachdem das Makro ausgeführt wurde... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von ThekesC, 1. September 2015.

  1. ThekesC Erfahrener User

    Range in Variable schreiben und Variable zurück in Zellen kopieren


    Hallo,
    Ich habe mir ein Makro geschrieben das bei nem Button-Click Zellenwerte von Zelle B nach A überschreibt.
    Nachdem das Makro ausgeführt wurde besteht keine Möglichkeit mehr Geschehenes rückgängig zu machen (kein ctrl+z).
    Deshalb wollte ich mir meinen zweiten Button erstellen der sich zuvor die Inhalte von A merkt und dann einfach wieder dort hinein kopiert.
    Hier ist mein Code:
    http://imgur.com/Rxwok0m
    Bis auf den zweiten Button (die letzten 3 Zeilen) funktioniert alles wie ich es haben möchte aber ich bin mir nicht sicher wie genau ich jetzt den Inhalt der Variable "SAVE" in die Excel Zellen einfügen kann.

    Ich habs auch in nem kleineren Dokument probiert und da funktioniert es :-/
    http://imgur.com/k1ALUX3
    Mittlerweile habe ich eine Idee woran es liegen könnte. Wenn ich zb Einträge in eine Variable speichern will:
    Set Variable1 = range(cells(1,1),cells(10,1)) und danach sage
    range(cells(1,1),cells(10,1)).clear so werden nicht nur die Einträge im Excel sondern auch die Einträge in "Variable1" gelöcht, das ist ein Verhalten das ich sonst aus keiner anderen Programmiersprache kenne.

    Ein Workaround fällt mir gleich ein: Anstatt die Einträge in A gleich mit B zu überschreiben, kopiere ich die A-Spalte irgendwo ans Dokument-Ende wo keiner es sieht und dann hol ich mir danach daraus die Werte zurück. Gibt es auch eine saubere Lösung für mein Problem?

    Vielen Dank,
    TC
     
    Zuletzt bearbeitet: 1. September 2015
  2. fette Elfe Erfahrener User
    Hallo TC,

    zwei Dinge sind mir an Deinem Text aufgefallen:
    - wenn man mit dem Befehl "clear" den Inhalt einer Zelle löscht, hat das keine Auswirkung auf den Inhalt einer Variablen, das wäre mir ganz neu.
    Ich kann mir höchstens vorstellen, dass die Variable durch das Beenden des Makros ihren Wert verliert und Du erst im nachhinein diesen Wert auslesen möchtest.
    - wofür überschreibst Du eigentlich Zellwerte mittels Makro, wenn Du sie danach eh wieder zurücksetzen möchtest?
     
    fette Elfe, 2. September 2015
    #2
  3. ThekesC Erfahrener User
    Hallo,
    Der Zurück Button ist nur dafür da um Benutzerfehler rückgängig zu machen.
    Nach dem Gebrauch eines Makros funktioniert ja ctrl+z nicht mehr!
    Zu den Variablen. Ich habe genau das gleiche Makro mit einer none-range Variable ausprobiert und es klappt.
    Sobald ich aber eine range Variable benötige tauchen diese Probleme auf. Die range variable speichert nur etwas das auch in der Tabelle wirklich vorhanden ist, wird das vorhandene überschrieben oder gelöcht, so wird auch der Variablen-Inhalt überschrieben/gelöcht.
     
  4. Exl121150 Erfahrener User

    Range in Variable schreiben und Variable zurück in Zellen kopieren

    Hallo,
    ich glaube, dem liegt ein Missverständnis zugrunde.
    In VBA gibt es 2 verschiedene Zuweisungsanweisungen:
    a) [LET] VariableName = Ausdruck
    b) SET VariableName = Objektinstanz

    Im Fall von Punkt a) wird "VariableName" der Wert des Ausdruckes rechts vom "=" zugewiesen.
    Im Fall von Punkt b) wird "VariableName" nur der Zeiger (Pointer) auf die Objektinstanz rechts vom "=" zugewiesen. Genau das ist eine Vorgehensweise, die in C oder in C++ oder in C# oder in Pascal usw. extrem häufig der Fall ist.
    Wenn ich "VariableName" einen Zeiger auf die Objektinstanz zuweise, so habe ich in "VariableName" quasi nur die Adresse von "Objektinstanz" gespeichert. Verändere ich dann in der Zwischenzeit die "Inhalte" von "Objektinstanz" und verwende danach wieder die Variable "VariablenName", so wurde am Inhalt von "VariablenName" überhaupt nichts geändert, aber sie zeigt auf die inzwischen geänderte "Objektinstanz" und gibt somit über die Eigenschaften und Methoden der Objektklasse, zu der die "Objektinstanz" gehört, die geänderten Inhalte wieder.

    "RANGE" liefert ein Bereichsobjekt für den Zellbereich A1:A10 und der Pointer (nicht die Inhalte/Werte) auf dieses Bereichsobjekt wird in der "SET"-Zuweisung in "Variable1" gespeichert.
    Danach wendest du unter Umgehung der Pointervariablen wieder auf ein spontan konstruiertes Objekt über dem Zellbereich A1:A10 die "Clear"-Methode an, womit die Inhalte dieses Zellbereiches entfernt sind.
    Die Zeigervariable "Variable1" zeigt noch immer (auch nach Anwendung der Lösch-Methode) auf das Bereichsobjekt für den Zellbereich A1:A10, denn schließlich wurde in ihr durch die "SET"-Anweisung nichts anderes gespeichert.
    Du hättest, statt 2x die RANGE-Methode zu bemühen, das 2. Mal genauso schreiben können: Variable1.Clear, wobei das nicht bedeutet, dass der Inhalt von "Variable1" gelöscht wird, sondern dass die Inhalte des Objektes, auf das "Variable1" zeigt, gelöscht werden.
     
    Exl121150, 3. September 2015
    #4
  5. ThekesC Erfahrener User
    Die unterschiedliche Syntax war mir noch nicht bekannt.
    Ich dachte mit Set würde ich die Zellenwerte und nicht einen Bereich definieren.
    Klappt nun alles wie geplant, vielen Dank :).
     
Thema:

Range in Variable schreiben und Variable zurück in Zellen kopieren

Die Seite wird geladen...
  1. Range in Variable schreiben und Variable zurück in Zellen kopieren - Similar Threads - Range Variable Variable

  2. Range-Bereich mit Variablen definieren

    in Microsoft Excel Hilfe
    Range-Bereich mit Variablen definieren: Hallo zusammen, ich habe folgendes Problem: Ich möchte gerne einen bestimmten Bereich per Range mit Variablen definieren. Aktuell sieht das ganze so aus: Code: Dim i as Integer Dim...
  3. Range-Variable auslesen und einfügen

    in Microsoft Excel Hilfe
    Range-Variable auslesen und einfügen: Hi zusammen, dieses Forum ist voller schlauer Köpfe, deswegen wende ich mich wieder an euch. Ich habe ein einfüge-makro geschrieben, das aus einer andere Excel-Datei Daten in eine Range-Variable...
  4. excel vba range variable

    in Microsoft Excel Hilfe
    excel vba range variable: hallo, ich suche mit der find Methode nach unterschiedlichen Textstellen, die an verschieden Variablen übergeben werden. Sub suchentest() Dim stelle1 As Range Dim stelle2 As Range Dim text1 As...
  5. VLookup/Sverweis mit Variablen/Range

    in Microsoft Excel Hilfe
    VLookup/Sverweis mit Variablen/Range: Hallo zusammen, ich lese jetzt seit ein paar Wochen hier passiv mit, und habe nebenbei an einem kleinen Automatisierungsprojekt für die Arbeit gearbeitet. Soweit funktioniert alles ganz gut, nur...
  6. Ranges mit Variablen ansprechen

    in Microsoft Excel Hilfe
    Ranges mit Variablen ansprechen: Hallo Forum eine Frage habe ich noch heute, wie kann ich einen Bereich mithilfe einer Variablen anwählen? Nämlich Code: ThisWorkbook.Worksheets("Tabelle1").Range("C" &...
  7. Variable Range VBA

    in Microsoft Excel Hilfe
    Variable Range VBA: Hallo zusammen ich weiß momentan häufen sich meine Probleme, aber das ist wohl so je mehr man sich mit VBA beschäftigt und noch nicht viel weiß. :-) Ich habe einen Code in dem Spalten von "I:BG"...
  8. Variables Range Select ?

    in Microsoft Excel Hilfe
    Variables Range Select ?: Hallo Excel Profis, ich sitze wiedermal vor einem für mich nicht lösbaren Problem. In einer Liste führe ich über einen VBA Code aus einer anderen Liste Namen und Jubilämsdaten ein. Über der...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden