PDA

Vollständige Version anzeigen : Sicherheitsabfrage beim Schliessen von Excel


Ghost570
24.04.2009, 15:04
Hallo an Alle,

ich möchte eine Sicherheitsabfrage beim Schliessen einer Exceldatei intergrieren. Ich habe ein Marko, welches im Betrieb von Excel eine Datenspeicherung ausführen läßt. Nun kann es jedoch vorkommen, das diese Datenspeicherung im laufenden Betrieb vergessen wird. Dies möchte ich durch eine Sicherheitsabfrage beim Schliessen von Excel verhindern. Mein "normales Marko" lautet folgendermaßen:

Option Explicit

Sub Ghost570()

Dim wsData As Worksheet
Dim wsHist As Worksheet
Dim lngFirstFree As Long

On Error GoTo Ghost570_Error

Set wsData = Sheets("Rechnung")
Set wsHist = Sheets("Rechnungsübersicht")

'erste freie Zeile feststellen
lngFirstFree = Rows.Count
If wsHist.Cells(lngFirstFree, "A").Value <> "" Then
MsgBox "Tabelle Historie gefüllt. Bitte Daten auslagern.", vbExclamation
Exit Sub
Else
lngFirstFree = wsHist.Cells(Rows.Count, "A").End(xlUp).Row + 1
End If

'Umschreiben der Werte
With wsHist
.Range(.Cells(lngFirstFree, 1), .Cells(lngFirstFree, 4)).Value = _
.Range(.Cells(2, 1), .Cells(2, 4)).Value
End With

'Erhöhen der Rechnungsnnumer um 1 und Löschen der Eingabe wie gewünscht
With wsData
.Range("C15").Value = .Range("C15").Value + 1
.Range("RGkdnr, RGArtikel, RGkg").ClearContents
End With

exit_here:
Set wsHist = Nothing
Set wsData = Nothing

On Error GoTo 0
Exit Sub

Ghost570_Error:

MsgBox "Fehler " & Err.Number & " (" & Err.Description & ") in der Prozedur Ghost570 von Modul Modul2"
Resume exit_here

End Sub

Wie kann ich dieses in die Sicherheitsabfrage beim Schliessen von Excel intergrieren?

Ich wünsche Euch ein schönes WE!

hary
24.04.2009, 15:17
Hi
versuch mal an einer Mappenkopie.
Code gehoert in Code der Mappe. Code wird ausgefuehrt bevor Mappe geschlossen.
<pre>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Dein Code
End Sub
</pre>
Gruss hary

Ghost570
24.04.2009, 15:22
Hallo Harry,

ich hätte gern noch eine Messagebox beim Schließen, welche dann beim Bestätigen das Makro ausführen läßt.

Gruß Ghost

jinx
24.04.2009, 15:23
Moin, Ghost570,

erste Frage: warum implementierst Du die Speicherung nicht in Deinem Code?

Ansonsten:

'DieseArbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved = False Then ThisWorkbook.Save
End Sub
nachteil: speichert immer, wenn die Mappe geschlossen wird. Dazu würde ich dann eher das Verlassen über eine Schaltfläche empfehlen...

Ghost570
24.04.2009, 15:33
Hallo Jinx,

genau das mit der permanenten Spreicherung möchte ich ja verhindern. Daher soll vor dem Schließen der Datei eine Messagebox (Message: "Soll eine Sicherung des letzten Datensatzes erfolgen?" - JA / NEIN) erscheinen, welche bei bestätigen den Code ausführen läßt.

Nach dem Ausführen (Msg: JA), bzw nicht Ausführen (Msg: NEIN) soll die Datei geschlossen werden.

Gruß Ghost

hary
24.04.2009, 15:43
Hi muss leider weg
<pre>
Dim iClick As Integer
iClick = MsgBox( _
prompt:="Ja oder nein?", _
Buttons:=vbYesNo)
If iClick = vbYes Then
'code bei ja
ElseIf iClick = vbNo Then
Code bei nein
End If
</pre>
Gruss Hary
schau nachher nochmal rein

jinx
24.04.2009, 15:51
Moin, Ghost570,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved = False Then
If MsgBox("Wollen Sie die Änderungen speichern?", vbYesNo) = vbYes Then
'Aufruf der Prozedur zum Umschreiben
Ghost570
ThisWorkbook.Save
Else
ThisWorkbook.Saved = True
ThisWorkbook.Close
End If
End If
End Sub
Prozedur wird doppelt aufgerufen, beim zweiten Mal ist aber angeblich alles bereits gespeichert...