Warnung wenn Zellinhalt überschrieben wird

Moderator: ModerationP

Warnung wenn Zellinhalt überschrieben wird

Beitragvon Logan Hodges » 13. Jun 2019, 18:08

Hallo miteinander,

ich suche nach einem Makro, das bei allen Zellen in einem bestimmten Bereich (z.B. A1:C3), welche nicht leer sind eine Meldung auswirft, sobald man versucht, den vorhandenen Zellinhalt zu überschreiben. Z.B. "Achtung Zellinhalt wirklich überschreiben?" und dann die Optionen OK oder Abrechen.

Könnt Ihr mir da helfen? Ich habe von VBA Codes nicht sonderlich Ahnung...

Vielen lieben Dank im Voraus!
Logan Hodges
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 13. Jun 2019, 17:59

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon GMG-CC » 13. Jun 2019, 18:15

Moin,
was das "nicht sonderlich Ahnung" anbetrifft, das gilt gewiss auch für das Nutzen einer Suchmaschine.
Zeige ein gewisses Maß an Eigeninitiative, dann wird der eine oder andere Helfer gewiss eher motiviert sein, dir zu helfen.
Gruß
Günther

Excel-ist-sexy!
Wenn du keine Excel-Version angegeben hast, gehe ich von mindestens Excel 2016 aus.
Hilfe zur Selbsthilfe, das ist IMHO der Sinn eines Forums, nicht Komplettlösungen für den kommerziellen Einsatz und das "natürlich" gratis!
Benutzeravatar
GMG-CC
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4090
Registriert: 12. Nov 2011, 23:17
Wohnort: Geesthacht bei Hamburg

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Logan Hodges » 13. Jun 2019, 18:50

Vielen Dank für Deine schnelle Antwort,

ich hätte mich nicht extra hier angemeldet, wenn ich nicht schon eine Weile in verschiedensten Foren gesucht hätte. Zwar findet man vielversprechende Themen, am Ende geht es allerdings fast immer um Warnungen bei Dopplung bestimmter Werte oder um Warnungen bei Einfügen in Zellen mit Zellinhalt mittels Drag and Drop.

Daher dieser Weg.
Dennoch vielen Dank für Deine Zeit
Logan Hodges
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 13. Jun 2019, 17:59

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon GMG-CC » 13. Jun 2019, 18:54

Gerne geschehen ...
Mit "Suchmaschine" meine ich Google & Co. und da gibt es bei Eingabe von "Excel Zellinhalt überschreiben Warnung" mehr als reichlich Links ...
Gruß
Günther

Excel-ist-sexy!
Wenn du keine Excel-Version angegeben hast, gehe ich von mindestens Excel 2016 aus.
Hilfe zur Selbsthilfe, das ist IMHO der Sinn eines Forums, nicht Komplettlösungen für den kommerziellen Einsatz und das "natürlich" gratis!
Benutzeravatar
GMG-CC
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4090
Registriert: 12. Nov 2011, 23:17
Wohnort: Geesthacht bei Hamburg

funktioniert nicht

Beitragvon Gast » 13. Jun 2019, 22:13

Hallo,
mein Versuch zu einem konstruktiven Beitrag scheitert leider.
Die Inputbox bietet nur "ok" oder "abbrechen" an.
Beide Alternativen führen zu demselben Ergebnis, der alte Wert kann nicht überschrieben werden.
Vielleicht kann das jemand gerade biegen?
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Antwort
Dim AltWert, NeuWert
If Not Intersect(Target, Range("A1:C3")) Is Nothing And Target <> "" Then
   Application.EnableEvents = False
   NeuWert = Target.Value
   Application.Undo
   AltWert = Target.Value
   If AltWert = vbNullString Then
      GoTo x
   Else
     Antwort = InputBox("Du hast eine gefüllte Zelle überschrieben. Rückgängig machen?", vbYesNo)
      If Antwort = vbNo Then
         Target.Value = NeuWert
      Else
         Target.Value = AltWert
      End If
   End If
 End If
x:  Application.EnableEvents = True
End Sub


Gruß Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Flotter Feger » 13. Jun 2019, 22:27

Hallo,

mit dem Change-Event kriegst du nicht geprüft, ob die Zelle vorher Leer oder beschrieben war. Dafür brauchst das SelectionChange-Event.
Anschließend vergleichst du im Change-Event, ob es sich um den selben Range-Bereich handelt und ob sich etwas am Value geändert hat.

Du solltest die MsgBox nehmen, nicht die InputBox ... sicherlich nur ein kleiner Schreibfehler.
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2227
Registriert: 24. Okt 2016, 16:40

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Gast » 14. Jun 2019, 15:12

Hallo,
mit dem Change-Event kriegst du nicht geprüft, ob die Zelle vorher Leer oder beschrieben war

Dazu diente ja das Application.Undo.
Aus nicht nachvollziehbarem Grund hatte ich InputBox statt MsgBox genommen.
So sollte es Funktionieren:
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Antwort
Dim AltWert, NeuWert

If Not Intersect(Target, Range("A1:C3")) Is Nothing And Target <> "" Then
      Application.EnableEvents = False
      NeuWert = Target.Value
      Application.Undo
      AltWert = Target.Value
      If AltWert = vbNullString Then
         Target.Value = NeuWert
         GoTo x
      Else
         If MsgBox("Soll Wert überschrieben werden", vbYesNo) = vbYes Then
            Target.Value = NeuWert
         Else
            GoTo x
         End If
      End If
x:   Application.EnableEvents = True
   End If
End Sub

Gruß und Dank an alle, die das Makro überprüfen,
Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Gast » 14. Jun 2019, 15:23

Hallo nochmals,
die Zeile:
If MsgBox("Soll Wert überschrieben werden", vbYesNo) = vbYes Then
ändern in
If MsgBox("Soll alter Wert überschrieben werden", vbYesNo) = vbYes Then
denn in der bearbeiteten Zelle sieht man ja zunächst nach Application.Undo den neuen Wert. Kann zu Konfusion führen.
Vielleicht macht sich ein Perfektionist an eine entsprechende Lösung.
Gruß Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Flotter Feger » 14. Jun 2019, 15:25

Hallo Claus,

ich seh schon, du hast mich nicht verstanden.

Das Target in Worksheet_Change ist bereits der neue Wert !!! Der alte Wert ist bereits weg !!!

Du hast aber nicht geprüft, ob die Bedingung beim alten Wert erfüllt war ! Das geht nur im SelectionChange-Event ... denn da steht noch der alte Wert in der Zelle.

Jetzt deutlicher ? :wink:
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2227
Registriert: 24. Okt 2016, 16:40

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Gast » 14. Jun 2019, 16:50

Hallo Sabrina,
Danke für die Hinweise.
Das Target in Worksheet_Change ist bereits der neue Wert !!! Der alte Wert ist bereits weg !!!

aber - oh Wunder - nach Apprlication.Undo ist er wieder da! Zumindest kann der Code intern überprüfen,
ob die Bedingung beim alten Wert erfüllt war

Bei meinen Tests wurden die Wünsche des OP erfüllt, wenn ich sie richtig verstanden habe.
Vielleicht kann die angesprochene mögliche Konfusion ausgeräumt werden, wenn man die MsgBox-Zeile nochmals modifiziert:
Code: Alles auswählen
If MsgBox("Soll der Wert[color=#FF0000]" & AltWert & "[/color] überschrieben werden", vbYesNo) = vbYes Then

Möglicherweise reden wir hier aneinader vorbei, dann: sorry

Gruß Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon slowboarder » 14. Jun 2019, 17:54

Hi Claus

die Ideemit dem Application.Undo gleich zu Beginn den alten Wert wieder herzustellen, ist zwar ganz clever, bringt aber auch ein paar nur aufwendig zu lösende Probleme mit sich.

Man sollte beim Erstellen von Change- und SelectionChange-Eventmakros immer berücksichtigen, dass der Anwender auch mehrere Zellen gleichzeitig selektieren und auch ändern kann und diese Zellen auch nicht unbedingt immer einen lückenlosen rechteckigen Zellblock bilden müssen ! (STRG-Taste beim Auswählen der Zellen, STRG+ENTER für die Eingabe)

Das macht die Sache kompliziert, wenn du dir in diesem Fall die neuen Werte vor dem Undo speichern willst, bräuchtest du dazu mehrere Arrays und müsstest dir zu jedem Array auch noch den dazugehörigen Zellbereich speichern.

auch deine erste IF-Abfrage hat hiermit schon ein Problem:
And Target <> "" funktioniert nur, mit einer Einzelzelle als Target und nicht mit mehreren Zellen.
Außerdem würde ich diese Abfrage komplett weglassen.
Denn diese Abfrage unterdrückt die Rückfrage auch dann, wenn vorhandener Zellinhalt gelöscht wurde und gerade dann würde ich Rückfragen.


daher ist es insgesamt einfacher, die Prüfung ob leere Zellen gefüllt oder bereits gefüllte Zellen überschrieben werden, im vorausgehenden SelectionChange-Event vorzubereiten und das Application.Undo nur dann auszuführen, wenn es erforderlich ist.
Dann muss man sich keine alten Inhalte merken, was den Umgang mit einer Mehrfachselektion erheblich vereinfacht:

Code: Alles auswählen
Option Explicit
Dim Anzahl As Long
Const Bereich As String = "A1:C3"


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(Bereich)) Is Nothing Then
    If Anzahl <> 0 Then
        Select Case MsgBox("Wollen sie die vorhandenen Werte wirklich ändern?", vbYesNo)
            Case vbNo
                With Application
                    .EnableEvents = False
                    .Undo
                    .EnableEvents = True
                End With
        End Select
    End If
End If
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Anzahl = 0
If Not Intersect(Target, Range(Bereich)) Is Nothing Then
    Anzahl = WorksheetFunction.CountA(Intersect(Target, Range(Bereich)))
End If
End Sub


Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25923
Registriert: 18. Apr 2009, 13:33

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Flotter Feger » 14. Jun 2019, 20:23

... da bin aber jetzt gespannt, was Sabrina dazu sagt ... Claus wird wieder sagen "Alles kein Problem ... das modifizieren wir ..."
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2227
Registriert: 24. Okt 2016, 16:40

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Gast » 14. Jun 2019, 21:14

Hallo Daniel,

das war für mich eine sehr informative Lehrstunde, eher eine Doppestunde, bis ich alle Einzelheiten Schritt für Schritt nachvollziehen konnte.
Da kommt Freude auf!

Ich war davon ausgegangen, dass der OP jeweils den Inhalt nur einer Zelle ändern will (was vermutlich auch der Fall ist).
Dass man mit STRG+ENTER den Inhalt gleich mehrerer Zellen auf einmal ändern kann, wusste ich nicht. Deshalb habe ich mir darüber auch keine Gedanken gemacht.

Großes Dankeschön für Deine Mühe, ein schönes Wochenende und
Gruß

Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Gast » 14. Jun 2019, 21:27

Hallo Sabrina,

mit Deiner Vermutung, was ich jetzt sagen würde, liegst Du nicht ganz richtig.
Nachdem ich durch Daniels Exkurs verstanden habe, was Du meintest, sage ich:
"Danke und ein schönes Wochenende".

Gruß Claus
Gast
 

Re: Warnung wenn Zellinhalt überschrieben wird

Beitragvon Logan Hodges » 16. Jun 2019, 22:49

Vielen lieben Dank an alle fleißigen Excelnauten! Der Code funktioniert einwandfrei!
Logan Hodges
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 13. Jun 2019, 17:59


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: TommyDerWalker und 27 Gäste