Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Worksheet.change erst nach Bestätigung

Betrifft: Worksheet.change erst nach Bestätigung von: Marcus Kempf
Geschrieben am: 17.11.2014 08:44:16

Hallo,

Folgendes will nicht ganz funktionieren.

Private Sub Worksheet_Change(ByVal Target As Range)
If MsgBox("Wollen Sie das Jahr wirklich ändern? Alle Einträge gehen verloren!", vbYesNo, " _
Sicherheitsabfrage") <> vbYes Then
Dim rngJahr As Range
Set rngJahr = Intersect(Range("A1"), Target)
If Not rngJahr Is Nothing Then
    If varJahr <> rngJahr.Value Then Call Start_Format: varJahr = rngJahr.Value
End If
Else: Exit Sub
End If
End Sub

Die Abfrage kommt zwar, aber "Start_Format" wird direkt ausgeführt.

Kann mir jemand den Denkfehler aufzeigen?

  

Betrifft: AW: Worksheet.change erst nach Bestätigung von: Matthias L
Geschrieben am: 17.11.2014 08:53:02

Hallo

Vielleicht solltest Du besser auf:
= vbYes prüfen ?



Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngJahr As Range, varJahr&
 If MsgBox("Wollen Sie das Jahr wirklich ändern? Alle Einträge gehen verloren!", vbYesNo, " _
Sicherheitsabfrage ") = vbYes Then
  Set rngJahr = Intersect(Range("A1"), Target)
  If Not rngJahr Is Nothing Then
     If varJahr <> rngJahr.Value Then MsgBox "Call Start_Format": varJahr = rngJahr.Value
  End If
      Else
      Exit Sub
 End If
End Sub

Ich hab zum Testen mal MsgBox "Call Start_Format" benutzt.
Musst Du natürlich wieder in: Call Start_Format ändern

Gruß Matthias


  

Betrifft: AW: Worksheet.change erst nach Bestätigung von: Marcus Kempf
Geschrieben am: 17.11.2014 09:13:51

Hallo Matthias,

das leuchtet erst einmal ein, ändert aber am Problem nichts, das Makro wird dennoch bereits vor beantwortung der Frage abgearbeitet.

Ich habe die Datei mal dran gehangen.

Nicht wundern, bin fleißig am werkeln, daher gerade etwas wüst.

Funktionsweise: Beim Ändern des Jahres "Normalschicht:A1" soll Start Format (Monate neu anordnen) erst nach Bestätigung erfolgen.

https://www.herber.de/bbs/user/93813.xlsm


  

Betrifft: AW: Worksheet.change erst nach Bestätigung von: Matthias L
Geschrieben am: 17.11.2014 09:43:22

Hallo

das Makro wird dennoch bereits vor beantwortung der Frage abgearbeitet.

Das stimmt so nicht!

Das Makro wird erst und nur dann ausgeführt wenn Du es mit "Ja" bestätigtst
Das kannst Du ja mal so testen

Sub Start_Format()
MsgBox "Makro will jetzt starten"
Exit Sub
'...

Was Du siehst ist die bedingte Formatierung die Dich täuscht, das Makro wäre gestartet.

Desweiteren solltest Du schon zu Beginn prüfen, ob die Änderung auch in A1 gemacht wurde
Das prüfst Du überhaupt nicht!
Wenn Du in z.B. B2 etwas eingibst startet das Event genauso.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngJahr As Range
If Not Intersect(Target, Range("A1")) Is Nothing And Target.Count = 1 Then
   If MsgBox("Wollen Sie das Jahr wirklich ändern? Alle Einträge gehen verloren!", vbYesNo, " _
Sicherheitsabfrage ") = vbYes Then
   Set rngJahr = Intersect(Range("A1"), Target)
   If Not rngJahr Is Nothing Then
      If varJahr <> rngJahr.Value Then Call Start_Format: varJahr = rngJahr.Value
   End If
         Else
         With Application
             .EnableEvents = False
             .Undo 'Eingabe rückgängig machen
             .EnableEvents = True
         End With
         Exit Sub
    End If
End If
End Sub
Bitte an einer Kopie testen wg. UNDO
Diese Teil kannst Du bei Bedarf ja auch wieder entfernen.

Gruß Matthias


  

Betrifft: ich schau später wieder rein, bin jetzt offline oT von: Matthias L
Geschrieben am: 17.11.2014 09:45:19




  

Betrifft: AW: ich schau später wieder rein, bin jetzt offline oT von: Marcus Kempf
Geschrieben am: 17.11.2014 11:54:04

llo Matthias,

das funktioniert soweit.

Aber ich steige nicht dahinter, warum die bedingte Formatierung dies tut.

Kannst Du mir das mal erläutern?


  

Betrifft: AW: ich schau später wieder rein, bin jetzt offline oT von: Rudi Maintaire
Geschrieben am: 17.11.2014 12:02:56

Hallo,
die bed. Formatierung wird aktualisiert bevor das Eventmakro gestartet wird.

Gruß
Rudi


  

Betrifft: AW: ich schau später wieder rein, bin jetzt offline oT von: Marcus Kempf
Geschrieben am: 17.11.2014 12:09:08

Und ließe sich dies irgendwie verhindern?


  

Betrifft: bed. Formatierung von: Rudi Maintaire
Geschrieben am: 17.11.2014 12:32:21

Hallo,
nur indem du auf die bed.Formatierung verzichtest und die Tabelle per VBA formatierst.

Gruß
Rudi


  

Betrifft: AW: bed. Formatierung von: Marcus Kempf
Geschrieben am: 17.11.2014 12:33:57

Ist das nicht an die workbook.enableevents gekoppelt?


  

Betrifft: AW: bed. Formatierung von: Rudi Maintaire
Geschrieben am: 17.11.2014 12:43:57

Hallo,
schlimmer. Die bed. Formatierung hängt an der Bildschirmaktualisierung und wird immer wieder neu aufgebaut. Scrollen um 1 Zeile/ Spalte reicht. Zu viele bed. Formate können dir die Mappe komplett lahm legen.

Darüber hinaus ist Enableevents eine Eigenschaft der Application, nicht des Workbooks.

Gruß
Rudi

P.S. Für ein Hallo und einen Gruß sollte immer Zeit sein.


 

Beiträge aus den Excel-Beispielen zum Thema "Worksheet.change erst nach Bestätigung"