Vor überschreiben warnen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Vor überschreiben warnen
von: Max
Geschrieben am: 02.10.2015 13:25:46

Hallo zusammen,
ich habe diesen tollen Beitrag gefunden:
https://www.herber.de/forum/archiv/216to220/217269_Vor_Ueberschreiben_warnen.html#217904
Nur leider wird bei mir die Fehlermeldung immer angezeigt ... also auch bei leeren Zellen, die ganz normal beschrieben werden, oder etwas hinein kopiert wird.
Es würde vollkommen reichen, wenn die Fehlermeldung nur kommt, wenn jemand versucht etwas per Paste zu überschreiben. Es soll quasi beim konsolidieren von mehreren Listen verhindert werden, dass ausversehen ein bereits gefüllter Bereich per Einfügen überschrieben wird.
Ein normales überschreiben einer Zelle per draufklicken und schreiben, soll weiterhin ohne Warnung funktionieren.
Evlt. liegt es auch einfach nur daran, dass die Lösung hier für XP ist?
Ich benötige sie für Win 7 und Excel 2010
Wäre super, wenn mir hier jemand helfen könnte?
Sind weitere Infos nötig?
Warnung, bin absoluter VBA-Rookie ;-)
Vielen Dank schon mal und beste Grüsse,
Max

Bild

Betrifft: AW: Eine Möglichkeit...
von: Michael (migre)
Geschrieben am: 02.10.2015 14:11:56
Hallo Max,
ist bspw.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Application.CutCopyMode Then
        If WorksheetFunction.CountA(Target) > 0 Then
            MsgBox "Achtung: Bereich enthält bereits Werte!", vbCritical, "Warnung"
             Application.CutCopyMode = False 'Einfüge-Modus verlassen, Optional
        End If
    End If
End Sub
Dieser Code muss in das Klassenmodul jener Tabellenblätter, in denen die Funktion greifen soll - Alt + F11 um den VB-Editor aufzurufen, DoKlick auf zB Tabelle1(DeinBlattname) und Code dort einfügen; für jedes Tabellenblatt entsprechend wiederholen, wenn benötigt.
Achtung: Die Warnungmeldung kommt in diesem Fall nur bei XL-internen Kopier-/Ausschneide-Vorgängen zum Tragen; d.h. sobald der Benutzer innerhalb XL, innerhalb des Tabellenblattes, einen Bereich kopiert/ausschneidet und dann einen weiteren Bereich auswählt, der bereits Werte (also mehr als "0" nicht-leere Zellen) enthält, erscheint die Warnmeldung - zusätzlich wird der XL-Einfüge-Kopier-Modus verlassen, d.h. ein etwaiger Einfügevorgang abgebrochen.
Allerdings ist es nach wie vor möglich direkt aus der Zwischenablage Zellen zu überschreiben - d.h. kopiert ein Benuzter außerhalb XL (bspw. aus einem Textfile) einen Wert und fügt diesen in eine Zelle ein, die bereits Werte enthält, ist dies a) möglich und b) läuft an der Warnmeldung vorbei (diese erscheint nicht).
LG
Michael

Bild

Betrifft: AW: Eine Möglichkeit... (Vor überschreiben warnen)
von: Max
Geschrieben am: 02.10.2015 14:49:09
Hallo Michael,
vielen Dank für die schnelle Rückantwort, das funktioniert einwandfrei :-)
Ein Frage hätte ich noch, könnte man das so erweitern, dass man die Warnung bekommt, aber für den Fall*, dass man es trotzdem überschreiben möchte, eine Auswahlmöglichkeit bekommt?
Also z.B. "OK" für überschreiben und "Abbrechen" um den Vorgang entsprechend abzubrechen.
* also der Fall könnte sein, dass es jetzt noch gar nicht darum geht die einzelnen Inhalte zu konsolidieren, sonder man beim bearbeiten etwas überschreiben möchte ... oder derartiges
Vielen Dank schon mal und beste Grüsse,
Max

Bild

Betrifft: AW: Sollte möglich sein...
von: Michael (migre)
Geschrieben am: 02.10.2015 18:24:48
Max,
Bin aber heute nicht mehr am Rechner! Melde mich bis Montag wieder mit einer Ergänzung!

Bild

Betrifft: AW: Sollte möglich sein...
von: Max
Geschrieben am: 02.10.2015 18:46:01
Hallo Michael,
hört sich super an ... vielen Dank für die Zwischeninfo und ein schönes WE!!
Beste Grüsse,
Max

Bild

Betrifft: AW: Ergänzung mit Abfrage
von: Michael (migre)
Geschrieben am: 05.10.2015 08:20:20
Hallo Max!
Hier die gewünschte Ergänzung:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Info As Byte
    If Application.CutCopyMode Then
        If WorksheetFunction.CountA(Target) > 0 Then
            Info = MsgBox("Achtung: Bereich enthält bereits Werte! Fortfahren?", vbYesNo, " _
Warnung")
            Select Case Info
                Case Is = vbNo
                    Application.CutCopyMode = False 'Nicht fortfahren, Kopier-Einfüge-Modus  _
verlassen
            End Select
        End If
    End If
End Sub
Alle Anmerkungen zu meinem ersten Code haben nach wie vor Gültigkeit - in diesem Fall erhalten die Benutzer nur eben die Möglichkeit Ja/Nein auf die Warnung zu antworten - bei Nein wird der Kopier-Einfügemodus-Verlassen, bei Ja bleibt dieser bestehen und ein Einfügen ist möglich.
LG
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Auswahlliste - nur jede zweite Spalte gewünscht"