Microsoft Excel

Herbers Excel/VBA-Archiv

If Not Selection.Copy Then ??? | Herbers Excel-Forum


Betrifft: If Not Selection.Copy Then ??? von: Karsten
Geschrieben am: 01.12.2009 17:28:53

Hallo,

ich möchte, dass wenn ich kopiert habe und auf eine andere Zelle wechsele, Target.WrapText = True übersprungen wird.
Da meine Codekonstruktion noch nicht stimmt, wird immer die Zelle in die ich wechsele, im Kopiermodus angezeigt. Kann mir jemand helfen?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Selection.Copy Then
Target.WrapText = True
Else
End If
End Sub
Gruß
Karsten

  

Betrifft: Ohne genau zu wissen, was DEIN "Target"... von: Luc:-?
Geschrieben am: 02.12.2009 01:41:36

...ist, Karsten,
ist es natürlich etwas schwierig, das einzuordnen und dann die richtige Wahl zu treffen... ;-)
Deshalb hier mal nur ein Versuch...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static AltZiel As Range
    If Not AltZiel Is Nothing Then
        Target.WrapText = Not AltZiel.WrapText 
    Else: Target.WrapText = True
    End If
    If Target.WrapText Then Set AltZiel = Target
End Sub

Jetzt sollte Folgendes passieren...
Wenn du das 1.Mal auf dem Blatt eine Zelle auswählst, wird diese im Kopiermodus angezeigt. Wählst du die nächste aus, wird diese nicht im Kopiermodus angezeigt, weil die andere noch im Kopiermodus angezeigt wird. Das bleibt auch bei jeder weiteren Zelle so, denn ich gehe davon aus, dass dann ggf hierhin kopiert wdn soll. Erst, wenn du die neue Zelle kopierst, wird der Kopiermodus umgeschaltet. Du musst sie dann wohl ein 2.Mal auswählen, wenn diese jetzt als AltZiel dienen soll...
Naja, irgendwie kommt mir das alles doch recht merkwürdig vor; sehe keinen rechten Sinn darin. Wahrscheinlich brauchst du was ganz Anderes! Was ist denn, wenn du dich schon auf einen bestimmten Lösungsweg für dein eigentl Problem versteift hast, hier jetzt nach Lösungsdetails fragst ohne das eigentl Problem zu nennen (oder gar zu kennen - glaub mir, das ist nicht gerade selten, ganze Coaching-Firmen leb[t]en davon!) — du bekommst, wenn überhpt, Details gelöst, die letztendlich doch nur zu einer suboptimalen oder keiner echten Gesamtlösung führen!
Wenn du wirklich feststellen willst, ob kopiert wurde, wirst du wohl den Inhalt der Zwischenablage mit AltZiel vgl müssen oder in 1er Change-EventProc 'ne Bool'sche Globalvariable True setzen müssen...
Trotzdem viel Erfolg, was immer du auch vor haben zu müssen glaubst... ;-)
Gruß Luc :-?


  

Betrifft: AW: Ohne genau zu wissen, was DEIN "Target"... von: Karsten
Geschrieben am: 02.12.2009 08:54:56

Hallo Luc:-?,
Danke. Aber irgendetwas stimmt da nicht.

Wenn du das 1.Mal auf dem Blatt eine Zelle auswählst, wird diese im Kopiermodus angezeigt.

...macht sie nicht. Nun ist es zugegebenermaßen so, dass die Vorgänge im Code mit meinen Horizont übersteigen, deshalb frage ich mal:
Was bedeutet Static?
Bedeutet If Not AltZiel Is Nothing Then, dass, wenn ich mich auf der alten Zelle befinde, es mit Target.WrapText = Not AltZiel.WrapText weitergeht? Aber, wenn ich mich auf der alten Zelle befinde, gibt es doch kein SelectionChange und damit kein Makrodurchlauf.

Da ich glaube, dass du noch nicht weißt, was ich vorhabe, stelle ich die Frage noch mal etwas anders:

Wenn ich etwas kopiert habe (also es in der Zwischenablage und noch nicht eingefügt ist), und ich z.B. Format – Zellen formatieren anwähle, dann löscht sich mit diesem Klick die Zwischenablage. Excel ist nun mal so konzipiert. Dasselbe passiert im Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.WrapText = True
End Sub
Wenn ich etwas kopiert habe (also es in der Zwischenablage und noch nicht eingefügt ist), soll Target.WrapText = True übersprungen werden, um den exceleigenen Alzheimereffekt zu übergehen. Mein Code war da offensichtlich nicht geeignet. Mit deiner Möglichkeit komme ich bis jetzt auch nicht weiter.

Gruß
Karsten


  

Betrifft: Es gäbe ja auch noch die Möglichkeit,... von: Luc:-?
Geschrieben am: 03.12.2009 03:54:45

...Karsten,
mit SendKeys ein [ESC] an xl zu senden, dann wäre der Kopiermodus auch aufgehoben. Ansonsten muss ich mir das noch mal genauer ansehen, falls ich dazu komme... ;-)
Gruß Luc :-?


  

Betrifft: AW: Es gäbe ja auch noch die Möglichkeit,... von: Karsten
Geschrieben am: 03.12.2009 07:18:51

Hallo Luc:-?,

der Kopiermodus soll nicht aufgehoben werden. Target.WrapText = True soll übersprungen werden, um den [ESC] zu übergehen.

Gruß
Karsten


  

Betrifft: AW: Es gäbe ja auch noch die Möglichkeit,... von: fcs
Geschrieben am: 05.12.2009 19:22:15

Hallo Karsten,

du kannst den Kopierstatus direkt abfragen und dann die gwünschte Aktion ausführen.

Gruß
Franz
Beispiel:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then
    Exit Sub
  Else
    'wird nur ausgeführt, wenn der Kopiermodus inaktiv ist
    Target.WrapText = True
  End If
End Sub