Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: MSGBox Speichern einpflegen?

MSGBox Speichern einpflegen?
02.07.2017 10:31:58
Andreas

Hallo,
nun habe ich das Makro lauffähig- macht alles wie es soll.
Könnte man aber am Ende der Prozedur noch eine MSG Box einpflegen, die mich fragt, ob die Änderungen in der Mappe Filename:="D:\ProtokollnR1.xlsm" auch gespeichert werden sollen, ja? Nein?
Nein würde bedeuten: Änderungen in ProtokollnR1.xlsm nicht speichern, Datei ProtokollnR1.xlsm schließen, und zurück zum Blatt Windows("Vorlage ortsveraenderliche .xlsm")- diese Änderungen dort können bestehen bleiben.
Zur Zeit läuft es ohne Nachfrage- es wird gespeichert und geschlossen.
Ist dies möglich und wo müsste was im Code eingeplegt werden?

  • Option Explicit
    Sub Auto_Nr_Verg()
    Workbooks.Open Filename:="D:\ProtokollnR1.xlsm"
    ' Nr und Ort automatisch in Protokollliste
    Application.CutCopyMode = False         'Zwischenspeicher löschen
    Dim Zeile As Long
    Zeile = Range("O65536").End(xlUp).Row
    MsgBox "Letzter  Eintrag ist in Zeile Nr. " & Zeile
    Windows("Vorlage ortsveraenderliche .xlsm").Activate
    Range("AC28").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("ProtokollnR1.xlsm").Activate
    Application.GoTo Range("O65536").End(xlUp).Offset(1, 0)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Application.GoTo Range("O65536").End(xlUp).Offset(0, -1)
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Vorlage ortsveraenderliche .xlsm").Activate
    Range("Y35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("W35:Z35").Select
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Windows("ProtokollnR1.xlsm").Activate
    Application.GoTo Range("O65536").End(xlUp).Offset(1, -1)
    Application.CutCopyMode = False         'Zwischenspeicher löschen
    ActiveWorkbook.Close True
    End Sub
    


  • LG Andreas
    Anzeige

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 10:47:34
    Hajo_Zi
    Hallo Andreas,
    in dieser Art.
        If MsgBox("Wollen Sie den Auftrag wirklich löschen.", vbYesNo + vbQuestion, "Löschabfrage ?" _
    ) = vbYes Then
    MsgBox "Ja"
    Else
    MsgBox "Nein"
    End If
    


    Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
    Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 11:40:33
    Matthias
    Hallo Andreas! Hier mal noch der Code zum Unterdrücken des Speicherns. Habe da mal im Code von Hajo die MsgBoxen ersetzt. Die.saved Eigenschaft auf true gesetzt bedeutet, dass sich nichts zum letzten Speichern geändert hat. Dadurch wird die Mappe beim Schließen nicht gespeichert. VG
    
    If MsgBox("Wollen Sie den Auftrag wirklich löschen.", vbYesNo + vbQuestion, "Löschabfrage ?" _
    ) = vbYes Then
    ActiveWorkbook.Close True
    Else
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close True
    End If
    

    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 14:15:32
    Andreas
    Danke Euch zweien,
    ist es möglichr- das bei der Anweisung Löschabfrage " JA " angeklickt - die Mappe "ProtokollnR1.xlsm" geschlossen wird- ohne die Änderungen in dieser Mappe zu übernehmen? Evtl. Schließen ohne Nachfrage und ohne Speichern?
    Habe die MSG Löschabfrage am Schluss eingefügt.
    LG Andreas
    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 16:20:25
    Matthias
    Hallo! ICh glaube da war dann vorhin die ZUordnung für die MsgbOx-Ergebnisse falsch. Probiere es mal so. VG
    
    If MsgBox("Wollen Sie den Auftrag wirklich löschen.", vbYesNo + vbQuestion, "Löschabfrage ?" _
    ) = vbYes Then
    'löschen also ohne speichern
    Application.DisplayAlerts = False
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close True
    Application.DisplayAlerts = True
    Else
    'nein angekikct. speichern und schließen
    Application.DisplayAlerts = False
    ActiveWorkbook.Close SaveChanges:=True
    Application.DisplayAlerts = True
    End If
    

    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 16:56:49
    Andreas
    Hallo Matthias, danke für die Hilfe... jetzt geht es schon besser.
    Leider werden bei dem Ausführen beide Mappen (ProtokollnR1.xlsm und Vorlage ortsveraenderliche .xlsm)
    über die MsgBox bedient. Vor der MSG Abfrage habe ich zwar noch mal
    Windows("ProtokollnR1.xlsm").Activate gesetzt. Leider ohne Erfolg.
    Würde es auch eine Lösung geben- die hier nur das Abbrechen der Speicherung der Mappe ("ProtokollnR1.xlsm"). zur Folge hat? Die zweite Mappe (Vorlage ortsveraenderliche .xlsm)
    Wenn nicht- kann ich auch so damit leben.
    LG Andreas
    Anzeige
    AW: MSGBox Speichern einpflegen?
    02.07.2017 22:14:57
    Matthias
    Hallo! Kann grad keinen großen Code posten / schreiben. Normalerweise könntest du an Stelle des ActiveWorkbook im Code auch explizit das betroffene Workbook angeben. Bspw.
    Workbooks("ProtokollnR1.xlsm")
    Das einfach im Code ersetzen dann sollte es gezielt nur das gewünschte Book schließen bzw. nicht speichern. Kann erst morgen wieder richtigen Code posten. Hoffe das hilft soweit.
    VG
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    MSGBox zur Abfrage von Speichervorgängen in Excel verwenden


    Schritt-für-Schritt-Anleitung

    Um eine MSGBox in dein VBA-Makro einzufügen, die beim Speichern nachfragt, gehe folgendermaßen vor:

    1. Öffne den VBA-Editor in Excel (Alt + F11).
    2. Wähle das Modul aus, in dem dein Makro gespeichert ist.
    3. Füge den folgenden Code am Ende deiner Prozedur hinzu:
    If MsgBox("Möchten Sie die Änderungen in ProtokollnR1.xlsm speichern?", vbYesNo + vbQuestion, "Speichern?") = vbYes Then
        ActiveWorkbook.Close SaveChanges:=True
    Else
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close False
    End If
    1. Stelle sicher, dass das Workbook, das du schließen möchtest, aktiv ist. Du kannst dies mit Windows("ProtokollnR1.xlsm").Activate sicherstellen.
    2. Teste das Makro, um sicherzustellen, dass die MSGBox korrekt funktioniert.

    Häufige Fehler und Lösungen

    • Fehler: Die Änderungen werden nicht richtig abgefragt.

      • Lösung: Achte darauf, dass die MSGBox nach allen Änderungen aufgerufen wird, bevor das Workbook geschlossen wird.
    • Fehler: Beide Mappen werden geschlossen.

      • Lösung: Verwende Workbooks("ProtokollnR1.xlsm").Close anstelle von ActiveWorkbook.Close, um gezielt nur die gewünschte Mappe zu schließen.

    Alternative Methoden

    Falls du nicht mit MSGBox arbeiten möchtest, kannst du auch Application.DisplayAlerts nutzen, um die Warnmeldungen von Excel zu steuern:

    Application.DisplayAlerts = False
    ActiveWorkbook.Close SaveChanges:=False
    Application.DisplayAlerts = True

    Diese Methode unterdrückt das Speichern, ohne eine Abfrage anzuzeigen.


    Praktische Beispiele

    Hier ist ein vollständiges Beispiel für ein Makro, das eine MSGBox zur Abfrage des Speicherns verwendet:

    Sub SpeichernUndSchliessen()
        Workbooks.Open Filename:="D:\ProtokollnR1.xlsm"
    
        ' ... (dein bestehender Code hier) ...
    
        If MsgBox("Möchten Sie die Änderungen in ProtokollnR1.xlsm speichern?", vbYesNo + vbQuestion, "Speichern?") = vbYes Then
            ActiveWorkbook.Close SaveChanges:=True
        Else
            ActiveWorkbook.Saved = True
            ActiveWorkbook.Close False
        End If
    End Sub

    Tipps für Profis

    • Nutze vbYesNoCancel in deiner MSGBox, um eine dritte Option hinzuzufügen, falls du eine Abbruchmöglichkeit anbieten möchtest.
    • Du kannst die MSGBox auch individuell gestalten, indem du unterschiedliche Nachrichten für verschiedene Bedingungen anzeigst.
    • Teste deine Makros in einer sicheren Umgebung, um unerwartete Datenverluste zu vermeiden.

    FAQ: Häufige Fragen

    1. Frage
    Wie kann ich die MSGBox anpassen, um mehr Informationen anzuzeigen?
    Antwort: Du kannst den Text in der MSGBox nach deinen Wünschen anpassen, indem du die Zeichenfolgen im Code änderst.

    2. Frage
    Was passiert, wenn ich 'Nein' auswähle?
    Antwort: Wenn du 'Nein' auswählst, wird die Mappe geschlossen, ohne dass die Änderungen gespeichert werden.

    3. Frage
    Kann ich die MSGBox auch im Workbook_Open-Ereignis verwenden?
    Antwort: Ja, du kannst die MSGBox auch in der Workbook_Open() Subroutine verwenden, um beim Öffnen der Datei nach dem Speichern zu fragen.

    Durch die Implementierung dieser Schritte und Tipps kannst du sicherstellen, dass deine Excel-Anwendung effizient und benutzerfreundlich bleibt.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige