expertenaustausch > microsoft.* > microsoft.excel

Hans.Alborg (03.10.2018, 11:52)
Hallo allerseits,

<Excel 2007>

Ich markiere einen Bereich aus mehreren Zellen und ziehe dann per Maus
etwas nach rechts oder links.

Das möchte ich mit VBA per Userform/ Spinbutton erreichen (jew. nur eine
Spalte r/l also pro Klick auf den Spinbutton).
Das Ziel soll später sein, in einer Tabelle befindliche Zelladressen
entsprechend zu ändern, wenn die in diesem Bereich liegen.

Ich habs mit Offset versucht, aber da gelingt es mir nur, die obere
linke Zelle des Bereichs zu versetzen. Resize muß ich ja nicht haben, da
der Bereich gleich groß bleibt?

....Es sieht sogar so aus, als ob garnichts verschoben wird, nur die
nächste "einzelne" Zelle im Bereich selektiert wird (Zellinhalt/ Format).

Der Code sieht etwa so aus (bv vom Spinbutton = 1 oder -1):

Selection.Offset(RowOffset:=0, ColumnOffset:=bv).Activate

Ist Offset der richtige Ansatz oder muß ich was mit Copy/Paste machen?

TIA,
Hans
Carlos Naplos (03.10.2018, 12:13)
Offset verschiebt keine Zellen oder Zellinhalte, sondern die "Auswahl".

Beispiel:

Range("A1").Offset(1,1) ist gleichbedeutend mit Range("B2")
Mehr nicht.

Am 03.10.2018 um 11:52 schrieb Hans.Alborg:

Hans, oops, ich sehe Dich schon solange hier in der NG, dass Deine Frage
mich erstaunt.

[..]
> Ist Offset der richtige Ansatz oder muß ich was mit Copy/Paste machen?
> TIA,
> Hans


lg CN
Hans.Alborg (03.10.2018, 13:48)
Hallo Carlos,

Carlos Naplos:

> Offset verschiebt keine Zellen oder Zellinhalte, sondern die "Auswahl".
> Beispiel:
> Range("A1").Offset(1,1) ist gleichbedeutend mit Range("B2")
> Mehr nicht.


Aha! Du erklärst das besser als MS!
Das heißt für mich Copy/Paste bzw. besser Cut/Paste.

> Hans, oops, ich sehe Dich schon solange hier in der NG, dass Deine Frage mich erstaunt.


Naja, ich richte meine Energie halt nur auf Sachen die ich gerade
brauche, und mit den VBA-Basics geht schon sehr viel. Offset hab ich in
der Zeit so 2x verwendet, und dachte mein jetziges Projekt würde dadurch
einfacher.
Eigentlich möchte ich einen kleinen Universalhelfer erstellen der die
Angaben zum verschobenen Bereich entsprechend neu adressiert, die
irgendwo abgelegt sind.
In der aktuellen Mappe ist ein grober Lageplan mittels Zellrahmen auf
dem einen Blatt und Angaben zu bestimmten (Zell-) Koordinaten in einem
anderen Blatt.
Weil ich noch am Lageplan ändere müssen sich die Angaben im anderen
Blatt entsprechend anpassen. Händisch: aufwändig.
Naja, den Bereich zu verschieben (erstmal r/l) ist der erste Schritt.

Hans
Carlos Naplos (04.10.2018, 18:24)
Offset (VBA) entspricht der Arbeitsblattfunktion BEREICH.VERSCHIEBEN,
die in englisch auch so (OFFSET) heißt. Vgl. Makrorekorder.

Am 03.10.2018 um 13:48 schrieb Hans.Alborg:
> Hallo Carlos,
> Carlos Naplos:
> Aha! Du erklärst das besser als MS!
> Das heißt für mich Copy/Paste bzw. besser Cut/Paste.


Genau. Bei Copy/Paste werden im Gegensatz zu Cut/Paste die Links wohl
nicht mitgezogen.
[..]
Hans.Alborg (04.10.2018, 20:28)
Carlos Naplos schrieb:

> Genau. Bei Copy/Paste werden im Gegensatz zu Cut/Paste die Links wohl
> nicht mitgezogen.


Die Codezeile lautet jetzt

Sh.Range(Ber).Cut Destination:= _
Range(Cells(Ze, Se + bv), Cells(Zl, Sl + bv))

Der Bereich wird also ausgeschnitten und in einen gleichgroßen Bereich
"+bv" kopiert. Die Variable "bv" hat die Werte +1 oder -1, erzeugt durch
einen Spinbutton auf einer "Modeless" Userform.

Hans
Ähnliche Themen