Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
376to380
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
376to380
376to380
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

beim Schließen-Ereignis alle Makros löschen

beim Schließen-Ereignis alle Makros löschen
07.02.2004 16:33:40
Thorsten
Hallo Excel-Fans
Ich möchte eine schreibgeschützte Datei unter einem anderen Namen speichern, der im "Speichern unter"-Dialog vorgegeben sein soll.
Beim Klicken auf SAVE funktioniert das so:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
Application.SendKeys "Preisliste-" & Left(Date, 2) & "-" & Mid(Date, 4, 2) & "-" & Right(Date, 2) & ".xls"
Application.EnableEvents = True
Dummy = True
AlleMakrosLoeschen
End Sub

Mit Hilfe des Makros "AlleMakrosLoeschen" werden zuerst alle Makros und Module gelöscht und erst dann öffnet sich der "Speichern unter"-Dialog. Der Dateiname lautet, wie gewünscht, "Preisliste-07-02-04.xls"
Der folgende Versuch beim Schließen-Ereignis......

Private Sub Workbook_BeforeClose(Cancel As Boolean)
AlleMakrosLoeschen
End Sub


Hier das Makro "AlleMakrosLoeschen"
Sub AlleMakrosLoeschen()

Application.EnableEvents = False

With ActiveWorkbook.VBProject _
.VBComponents(ActiveWorkbook.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With

With Application.VBE.ActiveVBProject
.VBComponents.Remove .VBComponents("frmcsvpreis")
.VBComponents.Remove .VBComponents("Modul1")
End With

If Dummy = False then
filesavename = Application.GetSaveAsFilename("Preisliste-" & Left(Date, 2) & "-" & Mid(Date, 4, 2) & "-" & Right(Date, 2) & ".xls")
If filesavename <> False Then
ActiveWorkbook.SaveAs (filesavename)
End If
End If

Dummy = False
Application.EnableEvents = True

End Sub


.....führt zu dem Erfolg, dass wie gewünscht, der "Speichern unter"-Dialog erscheint, auch der gewünschte Dateiname erscheint.
Wenn ich dann aber auf "Speichern" klicke, wird die Datei gespeichert UND es erscheint die Meldung:

"Sollen Ihre Änderungen in 'preisliste-07-02-04.xls' gespeichert werden?"

Klicke ich auf "JA", wird die Datei ohne Makros und Module gespeichert.
Klicke ich auf "NEIN", wird die Datei incl. dem Modul1 gespeichert.
Auch durch Unterdrücken der letzten Speicherfrage mit Hilfe von
ActiveWorkbook.Close SaveChanges:=True
Wird die Datei zusammen MIT dem Modul1 gespeichert.
Wie ist es möglich, dass auch beim Schließen-Ereignis die Datei OHNE Makros und Module gespeichert wird und das eben die letzte Frage, ob gespeichert werden soll, NICHT angezeigt wird?
Application.DisplayAlert = False
führt leider auch nicht zum Erfolg.
Vielen Dank für alle Anregungen, Denkanstöße und Tipps.
Ciao
Thorsten

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: beim Schließen-Ereignis alle Makros löschen
07.02.2004 18:46:54
Thorsten
weiss denn wirklich niemand eine Lösung?
AW: beim Schließen-Ereignis alle Makros löschen
07.02.2004 20:09:03
K.Rola
Hallo,
Thisworkbook.Saved = True
Gruß K.Rola
AW: beim Schließen-Ereignis alle Makros löschen
08.02.2004 12:51:24
Thorsten
Hallo K.Rola
Vielen Dank für Deinen Tipp. Aber leider wird mit "Deinem" Befehl noch immer gefragt, ob die Datei gespeichert werden soll.
Ich habe mich für eine andere Lösung entschieden.
Mit dem folgenden Code

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("b2").Value <> "" Then
Dim nme As Name
On Error Resume Next
Set nme = ThisWorkbook.Names("OK")
If Err > 0 Or nme Is Nothing Then Cancel = True
Else
Kontrolle = True
Application.CommandBars("csvToPreisliste").Delete
End If
End Sub

wird das Schließen-Ereignis deaktiviert, sobald in Zelle B2 Daten eingetragen wurden, was der Fall ist, nachdem die CSV-Daten übertragen wurden.
So hat der User dann nur die Möglichkeit, die Datei schließen zu können, in dem er die Datei zuerst speichert. Mit dem Code

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Kontrolle = True
Application.CommandBars("csvToPreisliste").Delete
Application.EnableEvents = False
Application.SendKeys "Preisliste-" & Left(Date, 2) & "-" & Mid(Date, 4, 2) & "-" & Right(Date, 2) & ".xls"
Application.EnableEvents = True
AlleMakrosLoeschen
End Sub

wird die nur für diese Datei wichtige Symbolleiste und alle Makros und Module gelöscht und erst dann ohne störende Rückfragen unter einem anderen, vorgegebenen Namen, den der User aber ändern kann und darf, gespeichert.
Danach ist es auch möglich, die Datei zu schließen, da ja kein VBA-Code dies mehr verhindert.
Dieser Thread kann also geschlossen werden...denn es funzt :-)
Ciao & trotzdem Danke
Thorsten
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige