Nachfrage bevor löschen

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

Betrifft: Nachfrage bevor löschen
von: Katja
Geschrieben am: 14.04.2005 14:38:47
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

Bild

Betrifft: AW: Nachfrage bevor löschen
von: Fritz
Geschrieben am: 14.04.2005 15:09:42
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Luc
Geschrieben am: 14.04.2005 15:56:25
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 :-?
Bild

Betrifft: AW: (Luc) Bahnhof
von: Katja
Geschrieben am: 14.04.2005 16:16:24
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
Bild

Betrifft: AW: (Luc) Bahnhof
von: ANdreas
Geschrieben am: 14.04.2005 16:33:19
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
Bild

Betrifft: AW: (Luc) Bahnhof
von: Herbert
Geschrieben am: 14.04.2005 16:37:54
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
Bild

Betrifft: AW: (Luc) Bahnhof
von: Andi
Geschrieben am: 14.04.2005 16:43:39
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
Bild

Betrifft: AW: Danke
von: Katja
Geschrieben am: 14.04.2005 16:52:54
Danke euch allen, werde mal alles ausprobieren.
Wenn es nicht klappt melde ich mich nochmal.
Gruß
Katja
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Katja
Geschrieben am: 14.04.2005 18:50:49
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: ransi
Geschrieben am: 14.04.2005 19:20:19


      
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 


Bild

Betrifft: AW: Nachfrage bevor löschen
von: Willi
Geschrieben am: 14.04.2005 19:24:57
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Hans
Geschrieben am: 14.04.2005 21:36:28
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Luc
Geschrieben am: 14.04.2005 22:28:04
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 :-?
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Hans
Geschrieben am: 14.04.2005 22:53:47
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Willi
Geschrieben am: 14.04.2005 22:40:53
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
Bild

Betrifft: AW: Nachfrage bevor löschen
von: Hans
Geschrieben am: 14.04.2005 23:03:39
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
Bild

Betrifft: AW: Hat geklappt
von: Katja
Geschrieben am: 15.04.2005 15:24:26
Hallo allezusammen,
das was ich suchte, war dabei u. funktioniert bei mir!!!!
Danke nochmals an alle!!!!
Gruß
Katja
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Makro zum Zeilen löschen"