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

Frage zu Zellenzuweisung

Frage zu Zellenzuweisung
30.05.2020 17:23:01
Thomas
hallo
In dieser Datei
https://www.herber.de/bbs/user/137892.xlsm
sind Spalte A und B von 1 bis 8 beschrieben.
Auf diese Current Region beziehen sich die folgenden Angaben.
Nun will ich mit folgendem Code Spalte B zu A kopieren.
Das Makro löscht Spalte A überraschenderweise.
Kann mir wer erklären, warum Spalte A gelöscht und nicht B nach A übertragen wird?
Sub TauscheSpalten()
With Range("A1").CurrentRegion
.Columns("A").Value = .Columns("B")
End With
End Sub
(Der Code steht in Modul 1)
Tom

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu Zellenzuweisung
30.05.2020 17:40:42
Martin
Hallo Tom,
du überschreibst doch Spalte A, darum verschwinden die alten Werte. Ich glaube du suchst folgenden Code:
Sub TauscheSpalten()
Columns(2).Cut
Columns(1).Insert Shift:=xlToRight
End Sub
Viele Grüße
Martin
AW: Frage zu Zellenzuweisung
30.05.2020 19:09:40
Thomas
Hallo Martin,
danke für Deine Antwort.
Du schreibst: "du überschreibst doch Spalte A"
Tja, nicht ganz. Das ist es, was ich möchte, und zwar mit dem Inhalt von Spalte B.
Das Makro aber löscht Spalte A. Mich würde interessieren, warum?
Tom
AW: Frage zu Zellenzuweisung
30.05.2020 19:30:35
Martin
Hallo Tom,
ich hatte von deinem Makronamen "TauscheSpalten" abgeleitet, dass du tatsächlich die Inhalte der Spalten A und B tauschen möchtest. Also wenn du wirklich lediglich Spalte B nach Spalte A kopieren möchtest, dann hast du nur das .Value bei Spalte B vergessen vergessen:
Sub TauscheSpalten()
With Range("A1").CurrentRegion
.Columns("A").Value = .Columns("B").Value
End With
End Sub
Viele Grüße
Martin
Anzeige
AW: Frage zu Zellenzuweisung
30.05.2020 21:32:29
Thomas
Hallo Martin,
der Makroname ist etwas irreführend, muss ich zugeben. Ich will nicht die Inhalte der Spalten A und B tauschen. Das war nur der Ausgangspunkt meines Verständnisproblems. (außerdem hast Du das ja schon dankenswerterweise erklärt).
Du schreibst, weil ich ".Value" vergessen habe, wird Spalte A gelöscht.
Nun würde ich gerne verstehen, in welchem Zusammenhang diese beiden Tatsachen stehen, damit ich dem Grund auf die Spur komme, warum Spalte A gelöscht wird.
Kannst Du mir das vielleicht erklären?
Tom
AW: Frage zu Zellenzuweisung
30.05.2020 22:24:17
Martin
Hallo Thomas,
so richtig beantworten kann ich dir die Frage nicht. Ich habe jetzt ein wenig herumgetestet und die Online-Hilfe bemüht. Einzelne Zellen werden anders behandelt als Zellbereiche. Also folgendes Makro würde gehen:
Range("C1") = Range("A1")
Und beim doppelten Transponieren geht es auch:
Range("C1:C20") = Application.Transpose(Application.Transpose(Range("A1:A20")))
Allerdings konnte ich im Überwachungsfenster bei der Zuweisung der Datenfelder an Variablen keinen Unterschied zu
Range("C1:C20") = Range("A1:A20")
feststellen, was wiederum nicht geht.
Ich bin gespannt, ob jemand eine Antwort dazu liefern kann.
Viele Grüße
Martin
Anzeige
siehe Anmerkung GerdL (owT)
01.06.2020 11:01:42
EtoPHG

AW: siehe Anmerkung GerdL (owT)
01.06.2020 11:41:13
Thomas
Danke für Deinen Hinweis, EtoPHG. Du werweist auf GerdL, welcher geschrieben hat:
"Weshalb daraus ein Variant mit Empty gebildet wird, anstatt einen Fehler zu produzieren,
weis ich nicht."
Das passend zu meiner Frage:
"Kann mir wer erklären, warum Spalte A gelöscht und nicht B nach A übertragen wird?"
Vielleicht kommen noch ein paar Ideen?
Tom
Value und Value2
01.06.2020 16:53:09
EtoPHG
Hallo Tom,
Gerd hat mit der Vermutung empty-Array Recht.
Eine direkte Zuweisung mit =, von einem Bereich(Range mehrer Zellen) zu einem anderen war eigentlich immer "illegal". Dazu hat man Range.Copy benutzt. Die neuerem XL Versionen (ab XL 2007) lassen diese Art von Zuweisung über die Eigenschaft .Value2 zu, so dass
.Columns(1).Value2 = .Columns(2).Value2
für Dich wie erwartet funktionieren würde.
Gruess Hansueli
Anzeige
AW: Value und Value2
02.06.2020 20:52:47
Thomas
Illegal? Huch, Du machst mir Angst. Hoffentlich erwischt mich da keiner.
Und warum geht dann
Range("A1").Value = Range("B1")
?
Ich versuche ja nur, den Hintergrund zu verstehen, um die default-Einstellung optimal nutzen zu können.
Default-Eigenschaft optimal nutzen?
03.06.2020 10:09:04
EtoPHG
Hallo Tom,
Was verstehst du unter die Default-Einstellung optimal nutzen?
Optimal IMHO wäre, sich nicht auf die Default-Eigenschaft eines Objekts zu verlassen, da MS sie ja in einer kommenden Version ändern könnte. Siehe dazu meine Anmerkungen zu Value2.
In deinem Fall besteht das angesprochene Objekt aus einer Einzelzelle. Du könntest für beide (A1 und B1) je nach Gutdünken .Value setzen oder nicht. Vorzuziehen wäre, sie in beiden Fällen zu setzen.
Gruess Hansueli
Anzeige
AW: Default-Eigenschaft optimal nutzen?
03.06.2020 10:40:38
Thomas
Hi Hansueli
Unter "Default-Einstellung optimal nutzen" verstehe ich, auf die Interpretation der Eigenschaft Value bei Fehlen einer solchen Angabe zurückzugreifen bzw. sie zu nutzen.
"Sich nicht auf die Default-Eigenschaft eines Objekts zu verlassen" ist zwar ein guter Rat für Ersteller von Codes, aber beim Einsatz bestehender Codes schwer durchsetzbar, insbesondre wenn sie mit Verwendung der Default-Eigenschaft klaglos funktionieren.
Würde mich nur interessieren, wo das steht, welche default-Regeln wo gelten. Ich krieg das immer durch Ausprobieren raus, was mich auch zu diesem Thema gebracht hat.
LG Tom
Anzeige
AW: Interessante Frage zu Zellenzuweisung
30.05.2020 22:17:23
GerdL
Hallo Tom,
so geht es.
Sub Unit()
With Range("A1").CurrentRegion
.Columns("A") = .Columns("B").Value
End With
End Sub
Warum einerseits die Value-Eigenschaft default gesetzt wird, nur auf der anderen Seite nicht?
Vermutlich wird das Zugewiesene zuerst ausgewertet u. ohne Eigenschaftsangabe als Rangeobjekt erkannt. Weshalb daraus ein Variant mit Empty gebildet wird, anstatt einen Fehler zu produzieren,
weis ich nicht.
Gruß Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige