Clever-Excel-Forum

Normale Version: Kommentare verschieben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo werte Excel-Gemeinde,

ich wende mich erneut mit einem Problem an Euch.

Ich habe in einem Bereich J9:OP24 Kommentare stehen. Mittels SpinButton möchte ich die Kommentare der markierten Zelle für den gesamten Zeilenbereich entweder eine Zeile hoch oder runter verschieben (SpinDown/ SpinUp).

Krux an der Sache, es sollen ausschließlich die Kommentare und nicht die Zellinhalte und auch nicht die Formatierung verschoben werden.

Das ganze über VBA.

Ich hoffe, dass ihr mir irgendwie helfen könnt und freue mich auf Euren Input Idea !

Viele Grüße!
MüMa0806
Ohne Versionsangabe sehe ich "Kommentare" als die Legacy-Kommentare an, ab 365 "Notiz" genannt
Einfügen/Inhalte/Kommentare ist die passende Methode. 

Beispiel für eine Zeile nach unten verschieben:
Code:
Option Explicit

Sub KommentarVerschieben1NachUnten()
Dim rngToMove As Range, c As Range

Set rngToMove = Selection '(oder was auch immer!)

Call rngToMove.Copy
Call rngToMove.Offset(1).PasteSpecial(Paste:=xlPasteComments)

For Each c In rngToMove
   If Not c.Comment Is Nothing Then Call c.Comment.Delete
Next c

Application.CutCopyMode = False
End Sub

Spinbutton und sonstigen Schnickschnack drumherum schaffst du sicher alleine.
Hallo EarlFred,

der Ansatz ist gut und ja, dass mit den SpinButton bekomme ich hin.

Allerdings sollen die Kommentare verschoben und nicht kopiert werden.

Vielleicht hast du ja noch eine Idee...

Ach und pardon: ich verwende das Excel von Office365.

Viele Grüße!
(28.11.2023, 13:04)MuMa0806 schrieb: [ -> ]Allerdings sollen die Kommentare verschoben und nicht kopiert werden. 
Erklär mir den Unterschied.
Hallo

nach meiner Ansicht sollte es mit diesem "abgeguckten" und geändertem Code der Kollegen gehen.
Frage:  sthen in der Zelle drüber/drunter keine Kommentare?? Soll da nichts verschoben werden??

mfg Gast 123

Code:
Sub test()
    'x= +1, -1 für Up, Down Richtung
    Selection.Copy
    Selection.Offset(x, 0).PasteSpecial Paste:=xlPasteComments
    Selection.Comment.Delete
End Sub
(28.11.2023, 13:06)EarlFred schrieb: [ -> ]Erklär mir den Unterschied.

Im gesamten Bereich sind Kommentare/ Notizen niedergeschrieben.

Beispielsweise in J9 und J10 steht jeweils ein Kommentar. Beim verschieben, sollen die quasi vertauscht werden, also der Kommentar aus J9 geht nach J10 und andersherum.

Ich hoffe, es heilwegs vernünftig erklärt zu haben?! 20
(28.11.2023, 13:17)Gast 123 schrieb: [ -> ]nach meiner Ansicht sollte es mit diesem "abgeguckten" und geändertem Code der Kollegen gehen.
Kannst du das auch bei einem Bereich mit mehr als einer Zelle bestätigen? Klappt in meiner Version nicht. 
 
Das Selection-Object wurde hier hilfsweise genutzt und ist durch den korrekten Bereich zu ersetzen - selbstredend.

(28.11.2023, 13:18)MuMa0806 schrieb: [ -> ]Beispielsweise in J9 und J10 steht jeweils ein Kommentar. Beim verschieben, sollen die quasi vertauscht werden, also der Kommentar aus J9 geht nach J10 und andersherum. 
Dann musst du die Kommentare der ersten oder letzten Zeile zwischenspeichern und nach dem Kopiervorgang der restlichen Kommentare an der passenden Stelle einfügen. Sinngemäß würde ich das auch so machen, wenn ich nicht die Copy-Methode nutzen würde.
(28.11.2023, 13:17)Gast 123 schrieb: [ -> ]Hallo

nach meiner Ansicht sollte es mit diesem "abgeguckten" und geändertem Code der Kollegen gehen.
Frage:  sthen in der Zelle drüber/drunter keine Kommentare?? Soll da nichts verschoben werden??

Ja, in den Zellen darüber und auch darunter stehen mitunter weitere Kommentare. Diese sollen weder überschrieben noch gelöscht werden. Die zeilen sollen quasi wechseln.
Hallo

hmmm, weil ich diese Aufgabenstellung noch nie hatte, habe ich eine Weile daran geknabbert. Hier meine Lösung.
Ich habe dabei berücksichtigt, das nicht in jeder Zelle drüber oder drunter ein Kommentar sein muss, aber kann.
Ich bin gespannt wie der Code bei dir funktioniert?  (snb hat dafür sicher wieder einen Einzeiler)   schmunzel ....

mfg Gast 123

Code:
Sub Kommentare_verschieben()
Dim KomText1, KomText2, KomText3
Dim Adr As String, VSZ As Integer

VSZ = 1  'Verschiebe Zahl -1/1  (oben/unten)

If Not Selection.Comment Is Nothing And _
   Not Selection.Offset(VSZ, 0).Comment Is Nothing Then
   KomText1 = Selection.Comment.Text
   KomText2 = Selection.Offset(VSZ, 0).Comment.Text
   Selection.Offset(VSZ, 0).Comment.Text Text:=KomText1
   Selection.Comment.Text Text:=KomText2
   Exit Sub
End If

If Selection.Offset(VSZ, 0).Comment Is Nothing Then
   Selection.Copy
   Selection.Offset(VSZ, 0).PasteSpecial xlPasteComments
   Application.CutCopyMode = False
   Selection.ClearComments
End If
End Sub

Nachtrag:  VSZ = Verschiebezahl +1/-1 = Offset(VSZ,0)  für obere Zeile oder untere Zeile. Die musst du bitte selbst erstellen.
Du schreibst: 'verschieben', du meinst 'verwechseln', 'austauschen'.

Code:
Sub M_snb()
  y = -1

  For Each it In Intersect(Selection.EntireRow, Range("J9:OP14")).SpecialCells(-4144)
    c00 = it.Offset(y).Comment.Text
    it.Offset(y).Comment.Text it.Comment.Text
    it.Comment.Text c00
  Next
End Sub
Seiten: 1 2 3 4