Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nachfrage bevor löschen

Forumthread: Nachfrage bevor löschen

Nachfrage bevor löschen
14.04.2005 14:38:47
Katja
Hallo,
gibt es eine Möglichkeit, eine MsgBox o.UserForm einzublenden bevor eine Zelle gelöscht wird. Also in der Art: " Soll der Inhalt dieser Zelle wirklich gelöscht werden?"
Für eure Mühe schon mal DANKE!
Gruß
Katja
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 15:09:42
Fritz
Hi Katja,
Ja, die gibt es.
z.B. MsgBox:

Sub Zellelöschen()
Dim Mldg, Stil, Titel, Hilfe, Ktxt, Antwort, Text1
Mldg = "Zelle wirklich löschen ?"    ' Meldung definieren.
Stil = vbYesNo + vbCritical + vbDefaultButton1    ' Schaltflächen
' definieren.
Titel = "Lösch-Dialogfeld"
Hilfe = "DEMO.HLP"    ' Hilfedatei
' definieren.
Ktxt = 1000    ' Kontext für Thema
' definieren.
Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
' Benutzer hat "Ja"
' gewählt.
If Antwort = vbYes Then
Range("J9:U29").Select
Selection.ClearContents
End If
End Sub

Fritz
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 15:56:25
Luc
Hallo Katja & Fritz,
dieses Makro setzt voraus, dass es immer aufgerufen wird, bevor eine Zelle gelöscht wird. Ich glaube, das kann man so wohl kaum voraussetzen. Automatisch kann das nur mit VBA-Ereignisprozeduren fkt. Aber, wenn man sowas installiert, sollte man VBA-Kenntnisse haben. Deshalb nur noch soviel: Da es kein Arbeitsblatt-Ereignis BeforeChange gibt, muss man sich mit den Ereignissen SelectionChange und Change begnügen. Bevor man manuell etwas ändern kann, muss man ja erst die Zelle auswählen, was das erstere Ereignis auslöst. In der zugehörigen Prozedur muss der Wert der Zelle in einer globalen Variablen "gemerkt" wdn. Wenn dann die Zelle geändert wird, wird das letztere Ereignis ausgelöst. In der zugehörigen Prozedur wird die MsgBox mit der Frage gestartet (Schalter Ja/Nein, es können außerdem alter und neuer Wert der Zelle angegeben wdn) und bei Nein der alte Wert wieder in die Zelle zurückgeschrieben und der neue somit verworfen. Bei Ja bleibt der neue Wert stehen.
Viel Erfolg, falls ihr es selbst ausprobieren wollt
Gruß Luc :-?
Anzeige
AW: (Luc) Bahnhof
14.04.2005 16:16:24
Katja
Erstmal Danke für die Antworten, muß sie erstmal ausprobieren.
(Für Luc: Also ich versteh nur "Bahnhof"!? Gibt es denn eine andere Lösung?
Gruß
Katja
AW: (Luc) Bahnhof
14.04.2005 16:33:19
ANdreas
Hallo Katja,
hier mal ein Lösungsansatz, Code einfügen in das Modul des entsprechenden Tabellenblattes:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "" Then
If Not MsgBox("Wollen Sie die Zelle wirklich löschen?", _
vbYesNoCancel + vbQuestion) = vbYes Then
On Error Resume Next
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
On Error GoTo 0
End If
End If
End Sub

Gruß
Andreas
Anzeige
AW: (Luc) Bahnhof
14.04.2005 16:37:54
Herbert
Hi,
damit man mit einem Makro auf etwas reagieren kann, muss es einen Auslöser geben, man sagt dazu in VBA Ereignis. Beim Löschen einer Zeile oder Spalte tritt das aber erst ein,
wenn das Löschen schon passiert ist. Besser verständlich?
Es gibt dafür zwar auch eine Lösung, aber die setzt schon advanced programming voraus,
soll heißen eine einfache Lösung, die du auch bei dir implementieren kannst, gibts nicht.
mfg Herbert
Anzeige
AW: (Luc) Bahnhof
14.04.2005 16:43:39
Andi
Hi, Luc's Bahnhof könnte man zB so "übersetzen":

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case MsgBox("Willst Du die Zelle wirklich ändern?", vbYesNo, "Hallo Katja")
Case vbYes
Exit Sub
Case vbNo
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End Select
End Sub

Schönen Gruß,
Andi
Anzeige
AW: Danke
14.04.2005 16:52:54
Katja
Danke euch allen, werde mal alles ausprobieren.
Wenn es nicht klappt melde ich mich nochmal.
Gruß
Katja
AW: Nachfrage bevor löschen
14.04.2005 18:50:49
Katja
Hallo,
also ich bekomme nur die letzte Möglichkeit zum laufen.
Ich kenne mich mit VBA auch nicht gut aus.
Desweiteren würde es mir durchaus reichen, wenn ich nur eine bestimmte Zelle damit versehen könnte, z.b. A8.
Könntet ihr mir nochmals helfen bitte?
Gruß
Katja
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 19:20:19
ransi


      
hallo katja
Trifft es das 
in etwa ?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A8"), Target) Is Nothing Then Exit Sub
    
If IsEmpty(Range("A8")) Then
        
If MsgBox(prompt:="A8 wirklich löschen? ", Buttons:=vbYesNo) = vbNo Then Application.Undo
    
End If
End Sub
ransi 


Anzeige
AW: Nachfrage bevor löschen
14.04.2005 19:24:57
Willi
Salü Katja
Probier es mit folgendem Makro:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZ As Range
For Each rngZ In Target
If rngZ.Address = "$A$8" Then
Select Case MsgBox("Willst Du die Zelle wirklich ändern?", vbYesNo, "Hallo Katja")
Case vbYes
Exit Sub
Case vbNo
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End Select
End If
Next
End Sub

Gruss Willi
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 21:36:28
Hans
Hallo Willi, hallo Excel-Fans,
der Vorschlag von Willi funktioniert bei mir ganz prima, nur wenn ich die entsprechenden Feldinhalte mit Button über eine Makrofunktion lösche fragt er zwar ab, aber die Daten sind trotz "abbruch" oder "nein" verloren. Kann man das anpassen?
Gruß
Hans
AW: Nachfrage bevor löschen
14.04.2005 22:28:04
Luc
Hallo Hans,
dann geht's wirklich nur so wie ich es in meinem Beitrag geschildert habe. Das fkt aber auch nur, wenn das Makro die Zelle vor dem Löschen selektiert hat und die events in diesem Moment enabled sind. In allen anderen Fällen wüsste ich momentan keine Lösung.
Hallo Katja,
mir war schon klar, dass du das wohl nicht verstehen wirst. Deshalb habe ich ja deinen ersten Unterstützer mit angesprochen. Der sollte damit angeregt wdn, nach praktikableren Wegen zu suchen. Hier wollen ja alle was lernen! Es kommt des Öfteren vor, dass für ein Problem keine einfache Lösung (z.B. mit Formeln) existiert. Dafür gibt's dann VBA und das teilt sich natürlich auch in viele Komponenten. Kaum einer wird alles können. Das dauert nämlich durchaus Jahre, aber damit anfangen muss man, wenn man wirklich in dieser Richtung Fähigkeiten erwerben will.
Gruß an alle, die sich so wacker geschlagen haben, mit oder ohne meine Anmerkungen ein funktionables Programm zustande zu bringen. So hatte ich mir das gedacht.
Luc :-?
Anzeige
AW: Nachfrage bevor löschen
Hans
Hallo zusammen,
ich habe Teile das Codes vonAndi genutzt und folgende Lösung über Makro für mich gefunden:

Sub Stammdaten_0()
Select Case MsgBox("Willst Du die Zelle wirklich ändern?", vbYesNo, "Liebe Kollegin, lieber Kollege")
Case vbYes
Range("B3").Select
Selection.ClearContents
Exit Sub
Case vbNo
With Application
.EnableEvents = False
.EnableEvents = True
End With
End Select
End Sub

In diesem Fall wird über den Button "Daten auf 0 setzen" eine Abfrage eingeblendet die über ja nein in diesem Falle das Feld "B3" bearbeitet. Ich hoffe die Sache hat keinen Haken :-)Danke an alle für die Anregungen.
herzliche Grüsse
Hans
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 22:40:53
Willi
Salü Hans
Dann muss du das Ueberprüfen in dein Makro aufnehmen. Z.B.

Private Sub CommandButton1_Click()
Dim rngZ As Range
For Each rngZ In Selection
If rngZ.Address = "$A$8" Then
Select Case MsgBox("Willst Du die Zelle wirklich löschen?", vbYesNo, "Hallo Katja")
Case vbYes
Selection.Delete
Case vbNo
Exit Sub
End Select
End If
Next
End Sub

Gruss
Willi
Anzeige
AW: Nachfrage bevor löschen
14.04.2005 23:03:39
Hans
Tschuldige Willi,
ich hatte zwischenzeitlich die Forumsübersicht nicht mehr aktualisiert. Insofern hätte ich mir vielleicht Arbeit sparen können. Werde Deinen Vorschlag gleich checken.
Danke
Hans
AW: Hat geklappt
15.04.2005 15:24:26
Katja
Hallo allezusammen,
das was ich suchte, war dabei u. funktioniert bei mir!!!!
Danke nochmals an alle!!!!
Gruß
Katja
Anzeige
;
Anzeige

Infobox / Tutorial

Abfrage vor Zellenlöschung in Excel


Schritt-für-Schritt-Anleitung

Um eine Abfrage einzublenden, bevor eine Zelle gelöscht wird, kannst Du das folgende VBA-Makro verwenden. Dieses Beispiel zeigt, wie Du eine MsgBox anzeigen kannst, die fragt, ob die Zelle wirklich gelöscht werden soll.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge in das Modul des entsprechenden Arbeitsblatts den folgenden Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngZ As Range
    For Each rngZ In Target
        If rngZ.Address = "$A$8" Then
            Select Case MsgBox("Willst Du die Zelle wirklich löschen?", vbYesNo, "Bestätigung")
                Case vbYes
                    Selection.Delete
                Case vbNo
                    Application.Undo
            End Select
        End If
    Next
End Sub
  1. Schließe den VBA-Editor und teste die Funktion, indem Du versuchst, die Zelle A8 zu löschen.

Häufige Fehler und Lösungen

  • Fehler: Die MsgBox wird nicht angezeigt, wenn die Zelle gelöscht wird.

    • Lösung: Stelle sicher, dass das Makro im richtigen Tabellenblatt-Modul eingefügt ist und dass die Ereignisse aktiviert sind.
  • Fehler: Die Zelle wird trotz "Nein" gelöscht.

    • Lösung: Überprüfe, ob das Application.Undo im richtigen Kontext verwendet wird. Es muss nach der Entscheidung in der MsgBox aufgerufen werden.

Alternative Methoden

Falls Du keine VBA-Kenntnisse hast, gibt es alternative Methoden, um sicherzustellen, dass Zellen nicht versehentlich gelöscht werden:

  1. Datenvalidierung: Du kannst Datenvalidierungsregeln verwenden, um zu verhindern, dass bestimmte Zellen gelöscht werden.
  2. Schutz des Arbeitsblatts: Schütze das Arbeitsblatt, damit Benutzer keine Zellen löschen können. Dies kann unter dem Menü "Überprüfen" eingestellt werden.

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung des Codes:

  • Beispiel 1: Du möchtest eine MsgBox anzeigen, wenn der Benutzer versucht, die Zelle A8 zu löschen.
  • Beispiel 2: Du kannst den Code anpassen, um mehrere Zellen zu überwachen, indem Du die If-Bedingung erweiterst.
If Not Intersect(Target, Range("A8,B8,C8")) Is Nothing Then
    ' Deine MsgBox und Logik hier
End If

Tipps für Profis

  • Optimierung des Codes: Verwende globale Variablen, um den vorherigen Wert einer Zelle zu speichern, bevor sie geändert wird.
  • Verwendung von Select Case: Der Einsatz von Select Case macht den Code übersichtlicher, besonders wenn Du mehrere Optionen abfragen möchtest.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um sicherzustellen, dass Dein Makro auch bei unerwarteten Eingaben stabil bleibt.

FAQ: Häufige Fragen

1. Wie kann ich das Makro nur für eine bestimmte Zelle aktivieren? Du kannst die If-Bedingung im Code anpassen, um nur für die gewünschte Zelle zu funktionieren, z.B. If Target.Address = "$A$8" Then.

2. Was passiert, wenn ich das Makro nicht im richtigen Modul einfüge? Das Makro wird nicht ausgeführt, da es nicht mit den Ereignissen des Arbeitsblatts verknüpft ist. Stelle sicher, dass Du es im spezifischen Arbeitsblatt-Modul einfügst.

3. Gibt es eine Möglichkeit, die MsgBox anzupassen? Ja, Du kannst den Text und die Schaltflächen der MsgBox nach Deinen Wünschen anpassen, indem Du die Parameter in der MsgBox-Funktion änderst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige