Clever-Excel-Forum

Normale Version: Rahmen und Farbe beim Verschieben des Zelleninhalts fixieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Tach Profs,

das "Problem" scheint sehr einfach und daher will ich nicht glauben, dass es keine (oder zumindest keine simple) Lösung gibt:

Ich möchte eine Zelle per drag-and-drop* verschieben - und zwar so, dass NUR der Zelleninhalt, aber NICHT die Zellenformatierung verschoben wird. Konkret: Rahmen und Hintergrundfarbe der Zelle sollen bleiben wo sie sind, nur der Zelleninhalt (Werte, Formeln...) soll verschoben werden.

Das Netz ist voll von dieser oder ähnlichen Fragen aus den letzten Jahren - leider aber ohne wirkliche Lösung. Ich wollte nur noch mal sicher gehen, dass nicht vielleicht "gestern" gerade eine Lösung gefunden oder von MS programmiert wurde, die ich noch nicht gefunden habe...

Also - bitte gebt meiner sanften Hoffnung Nahrung!

Danke & Grüße,
Thomas

*NICHT per ausschneiden und einfügen und auch nicht per rechte-Maustaste / Werte-einfügen etc.
Hallöchen,

mit der linken Taste kannst Du die Zelle verschieben.
Gleiche Aktion mit der rechten Taste führt in der Zielzelle beim Loslassen zu einem Auswahlmenü, wo Du Werte einfügen kannst, also kein Verschieben.

Andere Lösungen gehen wohl nur mit VBA.
Hallo André,

danke für die schnelle Antwort und immerhin - dieses Kontextmenü kannte ich noch nicht Wink 

Und für einen kurzen Moment hatte ich auch die Hoffnung, es könnte der Ideallösung schon nahe kommen; aber genau meine Funktion fehlt leider in der Auswahl: "Hierhin nur als Werte verschieben" gibt es leider nicht (warum auch immer).

Nun ja  :s
Moin!
Auf meiner Dose (Win xl2010) geht das, beim Apfel nicht?
EDIT:
Ja, hast Recht, der Ursprungswert muss per Entf gelöscht werden.

Dateiupload bitte im Forum! So geht es: Klick mich!
src="
Dateiupload bitte im Forum! So geht es: Klick mich!
" />

Gruß Ralf
...exakt. Nur warum?  :16:

Excel bietet mitunter für so komplexe Probleme geniale Lösungen und manchmal scheitert man an den simpelsten Herausforderungen. Das will mir dann nicht in den Kopf...
Hallo fanthomas,

na ja, vielleicht ist das was, was noch nicht viele Kunden verlangt haben. Wer weiß, vielleicht ist der Anteil der Nutzer, die diese Tricks kennen, auch nicht allzu hoch, sodass nur wenige Nutzer das überhaupt verlangen würden ...
Zumal es ja noch die Alternative VBA gäbe, falls durch viele vereinzelte Zellen ein hoher Aufwand beim nachträglichen Löschen der Inhalte entstehen würde. Das wäre sicher effektiver als 300 Zellen so mit Drag und Drop zu behandeln.
Also wenn man das Thema googlet, dann findet man -zig Fragen genau dieser Art seit vielen Jahren... Der Bedarf scheint also durchaus gegeben zu sein. Vermutlich wird MS aber Gründe haben, warum sich diese Funktion dann eben doch nicht ganz so simpel umsetzen lässt...

Und an VBA habe ich mich tatsächlich noch nie rangetraut  Blush
Hallo fanthomas,

bei den Fragen und Antworten bei Google wird aber in der Mehrzahl der Fälle das "normale" Verhalten gesucht und erklärt, hab ich den Eindruck. Na ja, ist ja eigentlich müßig, darüber zu diskutieren.

Wegen VBA ran trauen hast Du ja uns als Unterstützung. Die erste Frage dabei ist, ob der Einsatz von VBA überhaupt möglich ist. Gerade in Firmen wird das zuweilen unterbunden.

Hier mal 3 kleine Beispiele.

Beim ersten sind wir auch wieder bei einer Variante, nice to have, aber leider von MS nicht so vorgesehen :-(

Beim zweiten würdest Du einen kompletten, zusammenhängenden Bereich übernehmen. Da könnten dann auch Daten dabei sein, die Du im Zielbereich nicht haben willst.
Es wird auch der komplette Quellbereich entleert, also z.B. auch eventuell vorhandenen andere, erhaltenswerte Daten. Könnte man aber auch mit Range("A1,B2").Value = "" kombinieren

Im dritten Beispiel werden die nötigen Daten gezielt übernommen und an anderer Stelle positioniert. Das könnte dann auch eine Liste sein, wo die Daten in anderer Anordnung, z.B. untereinander, stehen. Ich hab hier mal die gleiche Anordnung genommen.
Die Quelldaten werden dann gezielt entfernt.

Wenn Du 300 Zellen zum Übernehmen hast, wird der Code entweder entsprechend länger oder man findet eine Regel zum Einsetzen einer Schleife, z.B. wenn jede 3. Zelle übernommen werden soll ...
Übrigens gibt es da auch einen Makrorekorder. Der erzeugt zwar nicht gerade schönen Code, aber er funktioniert wenigstens (meistens).

Sub test1()
Range("C1,D2").Value = Range("A1,B2").Value 'geht leider nicht
Range("A1,B2").Value = ""
End Sub

Sub test2()
Range("C1:D2").Value = Range("A1:B2").Value
Range("A1:B2").Value = ""
End Sub

Sub test3()
Range("C1").Value = Range("A1").Value
Range("D2").Value = Range("B2").Value
Range("A1,B2").Value = ""
End Sub
Moin!
Je länger man darüber nachdenkt, desto unverständlicher ist es, dass es in Excel nicht möglich ist.
Wenn ich eine formatierte Zelle ausschneide, ist es in Word problemlos möglich, entweder nur den Wert oder aber den formatierten Text der Zelle einzufügen.
In Excel kann ich nur den kompletten Container incl. aller Formatierungen einfügen.

Daher: Es ist durchaus möglich, die Zwischenablage selektiv auszulesen, schließlich geht es ja auch bei der .Copy-Methode, bei .Cut unverständlicherweise nicht.
Nur bei .Copy kann ich dann per .PasteSpecial problemlos auf alles mögliche zugreifen ("Inhalte einfügen"), bei .Cut läuft VBA in den Fehler:
"Die PasteSpecial-Methode des Range-Objekts konnte nicht durchgeführt werden."
(bzw. wird im Kontextmenü nur "Einfügen" angezeigt, watrum auch immer)

Es dürfte wirklich kein Hexenwerk sein, einen Befehl wie .CutValues resp. "Werte ausschneiden" zu implementieren.

Wahrscheinlich geht dies mit APIs, ich werde mal in einer stillen Stunde recherchieren.
Aber: Der Apfel ist bei APIs außen vor, dies geht nur bei Dosen, weil diese APIs Bestandteil des Betriebssystems sind.

Vorweg mal ein VBA-Code:
Code:
Sub RPP()
With ActiveCell
   .Copy
   .Offset(0, 2).PasteSpecial xlPasteValues
   .ClearContents
End With
End Sub

Gruß Ralf
Noch etwas:
Das ziehen am Zellrahmen ist ja nicht anderes als Drag&Drop
Während es bei ActiveX-Controls dafür ein Ereignis gibt, welches man auswerten kann:
Code:
Private Sub TextBox1_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
                                       ByVal Action As MSForms.fmAction, _
                                       ByVal Data As MSForms.DataObject, _
                                       ByVal X As Single, _
                                       ByVal Y As Single, _
                                       ByVal Effect As MSForms.ReturnEffect, _
                                       ByVal Shift As Integer)
… gibt es dies nicht im Klassenmodul der Tabelle.

Gruß Ralf
Seiten: 1 2