Microsoft Excel

Herbers Excel/VBA-Archiv

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

beforeclose

Betrifft: beforeclose von: na fets
Geschrieben am: 24.07.2014 09:50:55

Hallo zusammen,

habe bereits im Forum nach meinem Problem gesucht bin auch eine Lösung gestossen, allerdings funktioniert diese bei mir nicht. Ich möchte vor dem schliessen eine Msgbox, die fragt, ob gespeichert werden soll.

Code:

Sub Workbook_BeforeClose(Cancel As Boolean)

MsgBox "Datei speichern?"

If MsgBox("Datei speichern?", vbYesNo, "Speichern") = vbYes Then

    Call speichern

End If


End Sub

Wenn man nun schliesst kommt nur die Standardmeldung, ob man die änderung speichern will.

Vielen Dank im Voraus,

Gruss stefan

  

Betrifft: AW: beforeclose von: Daniel
Geschrieben am: 24.07.2014 09:53:47

Excel fragt doch automatisch beim Schließen, ob es die Datei speichern soll.
Das musst du nicht extra programmieren.

Gruß Daniel


  

Betrifft: AW: beforeclose von: na fets
Geschrieben am: 24.07.2014 10:10:43

Ja, da hast du recht. Aber ich möchte es gern programmieren, da das Makro speichern die Datei ohne Makros mit dem aktuellen Datum als Kopie speichert.

In das Workbook fügt man Daten ein, wertet sie durch verschiedene Makros aus. Anschliessend sollen die erstellten Diagramme und Worksheets ohne makros gespeichert werden.

Funktioniert auch alles (auch das Makro speichern). Es soll aber sicherheitshalber vor dem schliessen gefragt werden, ob gespeichert wurde. wenn nicht soll das Makro "speichern" ausgeführt werden.

vollständigkeitshalber hier der code des speicherns

Sub speichern()

Sheets.Copy
ActiveWorkbook.SaveCopyAs Filename:="C:...-\" & Format(Date, "yymmdd") & "_Test" & ".xls"
ActiveWorkbook.Close savechanges:=False

End Sub
Gruss Stefan


  

Betrifft: warum denn das ? von: Matthias L
Geschrieben am: 24.07.2014 10:10:54

Hallo

Funktioniert doch.
Wo hast Du denn den Code stehen? Gehört in DieseArbeitsmappe

Sub Workbook_BeforeClose(Cancel As Boolean)
 If MsgBox("Datei speichern?", vbYesNo, "Speichern") = vbYes Then
  Call speichern
 End If
End Sub
und diese Sub() in ein allgem. Modul
Option Explicit
Sub speichern()
 ThisWorkbook.Save
 MsgBox "Datei wurde gespeichert"
End Sub
und für was soll das gut sein?
Die doppelte MsgBox war auch nicht nötig!

Willst Du speichern obwohl nichts geändert wurde?

Gruß Matthias


  

Betrifft: AW: warum denn das ? von: na fets
Geschrieben am: 24.07.2014 10:15:20

Hallo Matthias,

ja du hast Recht, hatte das Sub() im Eifer des Gefechts in mein Modul eingefügt. Danke für deine schnelle Hilfe!! Ja doppelte Msgbox is überflüssig ;)

Erklärung habe ich bereits gegeben, ich denke so dürfte es nun funktionieren.

Danke und Gruss


  

Betrifft: AW: warum denn das ? von: UweD
Geschrieben am: 24.07.2014 10:49:31

Hallo

du kannst das natürlich so gestalten, dass die Box nur kommt, wenn noch nicht gespeichert wurde.


Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved = False Then
    If MsgBox("Datei speichern?", vbYesNo, "Speichern") = vbYes Then
        Call speichern
    Else 'nur bei Bedarf
        ThisWorkbook.Saved = True 'Änderungen werden verworfen
    End If
  End If
 End Sub
Gruß UweD


  

Betrifft: AW: warum denn das ? von: na fets
Geschrieben am: 24.07.2014 11:15:02

Hallo Uwe,
das ist natürlich eleganter. Danke dafür =)

ich weiss nicht warum, aber aus irgendwelche gründen verhaus mir grad mein speichern.

Sub speichern()

Sheets.Copy
ActiveWorkbook.SaveCopyAs Filename:="C:...-\" & Format(Date, "yymmdd") & "_Test" & ".xls"
ActiveWorkbook.Close savechanges:=False

End Sub
Es speichert als xls, aber dennoch sind die Makros noch vorhanden. Ich weiss, dass dieses Thema hier schon sehr oft behandelt wurde, aber i.wie bekomme ich das nicht auf die Reihe.
Habe sowohl
Sub speichern ()
Sheets.Copy
    Set WB = ActiveWorkbook
    For n = WB.VBProject.vbComponents.Count To 1 Step -1
        For i = 1 To WB.VBProject.vbComponents(n).CodeModule.CountOfLines
            If WB.VBProject.vbComponents(n).Type <> 1 _
            And WB.VBProject.vbComponents(n).Type <> 3 Then _
                WB.VBProject.vbComponents(n).CodeModule.DeleteLines 1
        Next
    Next
    WB.SaveAs Filename:="C:\Eigene Dateien\" & Format(Date - 1) & ".XLS"
    WB.Close savechanges:=False

End Sub
als auch
Sub ModulLoeschen()
    Workbooks("Mappe1.xls").SaveAs "Test.xls"
    With Application.VBE.ActiveVBProject
        .vbComponents.Remove .vbComponents("Modul2")
    End With
End Sub
erfolglos ausprobiert.

beim 2. Versuch löscht es mir aus dem aktuellen Workbook die Makros, beim 1. Versuch sind die Makros noch vorhanden und funktionieren.

Vllt sieht ja jemand ne Lösung.

Hier die Datei, an der ich arbeite: https://www.herber.de/bbs/user/91701.xlsm

Grüsse und Danke


  

Betrifft: AW: warum denn das ? von: Nepumuk
Geschrieben am: 24.07.2014 11:23:34

Hallo,

SaveCopyAs speichert eine Kopie der Mappe und wenn im Original Makros drin sind, dann sind die natürlich auch in der Kopie.

Du musst die Mappe mit SaveAs speichern, da kannst du das Format angeben. Und nur eine andere Dateiendung anzugeben hilft nicht, du musst beim Parameter FileFormat als Wert xlOpenXMLWorkbook benutzen. Damit wird die Mappe als garantiert makrofreie .xlsx gespeichert.

Gruß
Nepumuk


  

Betrifft: AW: warum denn das ? von: na fets
Geschrieben am: 24.07.2014 12:02:06

Hi,

danke für die Antwort!

Mit

Sub speichern()

Sheets.Copy
ActiveWorkbook.SaveAs Filename:="X:\A3\04_shared\012_MWT\001_team\Praktikanten\S. Glück MWG-P4\ _
WZ-Beanstandungen\" & Format(Date, "yymmdd") & "_Test" & ".xls", FileFormat:=xlOpenXMLWorkbook

ActiveWorkbook.Close savechanges:=False

End Sub
Speichert es mir die die Datei ohne Makros (laut VBA-Editor Strukturbaum), sobald ich aber auf eine Steuerelement klicke, öffnet sich die ursprüngliche Datei und versucht das Makro welches mit dem Steuerelement verbunden ist zu öffnen. Wie kann ich das verhindern?

Gruss und Danke


  

Betrifft: AW: warum denn das ? von: na fets
Geschrieben am: 24.07.2014 12:40:19

Hi,

danke für die Antwort!

Mit

Sub speichern()

Sheets.Copy
ActiveWorkbook.SaveAs Filename:="X:\A3\04_shared\012_MWT\001_team\Praktikanten\S. Glück MWG-P4\ _
WZ-Beanstandungen\" & Format(Date, "yymmdd") & "_Test" & ".xls", FileFormat:=xlOpenXMLWorkbook

ActiveWorkbook.Close savechanges:=False

End Sub
Speichert es mir die die Datei ohne Makros (laut VBA-Editor Strukturbaum), sobald ich aber auf eine Steuerelement klicke, öffnet sich die ursprüngliche Datei und versucht das Makro welches mit dem Steuerelement verbunden ist zu öffnen. Wie kann ich das verhindern?

Gruss und Danke


  

Betrifft: AW: warum denn das ? von: Nepumuk
Geschrieben am: 24.07.2014 12:45:06

Hallo,

diese "Formularsteuerelemente" musst du natürlich vor dem Speichern separat löschen.

Gruß
Nepumuk