Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
400to404
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
400to404
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Benutzer definierte Save (Speichern) Funktion

Benutzer definierte Save (Speichern) Funktion
Heinrich
Hallo Spezialisten,
ich habe folgende Situation:
Ich möchte die Funktion "Speichern" benützen um ein Dokument mit vorgegebenem Pfad und einem Namen, der aus Eintragungen in der Tabelle zusammengesetzt wird, zu speichern.
Die Funktion "Speichern unter" soll nicht verändert werden.
Dazu habe ich mir folgendes Makro geschrieben. Vorweg, das Makro funktioniert mit einer blöden Ausnahme. Diese ist, wenn ein neues Dokument über die Formatvorlage erstellt wird, wird immer der "Speichern unter / Save as" Dialog aufgerufen, da die Variable SaveAsUI automatisch True gesetzt ist. Einmal unter irgendeinem Namen gespeichert funktioniert die Sache.
Sinn der Sache ist natürlich, es sollte auch beim ersten mal funktionieren.
Nun meine Frage. Gibt es eine Möglichkeit die Speichern / Save Funktion für das aktive Workbook generell zu ersetzen, so das Aufrufe von "Speichern" über das Menü oder die Icon Leiste direkt in die Funktion "save_spezial()" geleitet werden?
Ich würde mich über Tipps sehr freuen.
Gruß
Heinrich
------------------------------------------------------

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Static EventAktiv
If SaveAsUI = True Then Exit Sub ' "Save as" nicht verändern
If Sheets("Daten_Auswahlfelder").Cells(30, 1).Value = 0 Then Exit Sub ' Spezial Behandlung nicht aktiviert
If EventAktiv = True Then Exit Sub ' rekursiver Aufruf der Funktion abfangen
EventAktiv = True
Cancel = True ' Verhindern, daß die Standard Save Funktion nach verlassen dieser Funktion aufgerufen wird
save_spezial ' Eigene Save Funktion aufrufen
EventAktiv = False
End Sub
Sub save_spezial()
Dim Berichtnummer As String, Benennung As String
Dim Teilenummer As String, Speicherpfad As String
Dim Pfad_kpl As String
Berichtnummer = Sheets("Deckblatt").Cells(9, 6).Value
Benennung = Sheets("Deckblatt").Cells(13, 6).Value
Teilenummer = Sheets("Deckblatt").Cells(14, 6).Value
Speicherpfad = Sheets("Daten_Auswahlfelder").Cells(33, 1).Value
Pfad_kpl = Speicherpfad & Berichtnummer & " " & Benennung & " " & Teilenummer
If Berichtnummer = "" Then
MsgBox ("Berichtnummer fehlt")
Exit Sub
End If
If Benennung = "" Then
MsgBox ("Benennung fehlt")
Exit Sub
End If
If Teilenummer = "" Then
MsgBox ("Teilenummer fehlt")
Exit Sub
End If
MsgBox ("Datei wird gespeichert unter " & Pfad_kpl)
On Error Resume Next ' Sollte ein Fehler auftreten, einfach weitermachen (Passiert wenn Datei vorhanden bei Dialog Antwort "Nein")
ActiveWorkbook.SaveAs Filename:=Pfad_kpl, FileFormat:=xlWorkbookNormal
End Sub

------------------------------------------------------

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Als Ansatz ...
Volker
Hallo Heinrich,
Du koenntest beim Oeffnen der Mappe wie folgt umleiten:

Private Sub Workbook_Open()
'   "Speichern" und "Speichern unter" im Menue Datei umleiten:
With Application.CommandBars("Worksheet Menu Bar").Controls("Datei")
.Controls("Speichern").OnAction = "save_spezial"
.Controls("Speichern unter...").OnAction = "save_spezial"
End With
End Sub

und beim Schliessen wieder zurueckstellen

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Reset
End Sub

Gruss
Volker Croll
www.crolltools.de
Anzeige
AW: Als Ansatz ...
24.03.2004 19:16:29
Heinrich
Hallo Volker,
danke für deinen Tipp, ich werde es heute abend ausprobieren, ob ich so zum Ziel komme.
Gruß
Heinrich
AW: Benutzer definierte Save (Speichern) Funktion
ChrisL
Hi Heinrich
Der Ansatz von Volker scheint mir vernünftig. Bei Speichern leitest du auf dein eigenes Makro um und bei Speichern unter kannst du ja den Standarddialog verwenden...
Application.Dialogs(xlDialogSaveAs).Show
Wozu du EventActiv verwendest versteh ich übrigens nicht ganz. Ferner könnte dir für ähnliche Ansätze der folgende Befehl nützlich sein. In deinem Code brauchst du es nicht, da du SaveAs sowieso separat abfängst, jedenfalls..

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error GoTo errorhandler
Application.EnableEvents = False
' Eigene Save-Prozedur
Application.EnableEvents = True
Exit Sub
errorhandler:
Application.EnableEvents = True
MsgBox "Fehler...", vbCritical
End Sub

Gruss
Chris
Anzeige
AW: Benutzer definierte Save (Speichern) Funktion
Heinrich
Hallo Chris,
danke für deinen Tipp.
Zu deiner Frage, warum ich EventActiv benötige folgendes:
Da ich bei meiner save_spezial Funktion speichern tue löse ich bisher den Event "Workbook_BeforeSave" nochmal zusätzlich aus. Da aber der Ablauf speichern schon aktiv ist, habe ich die Funktion "Workbook_BeforeSave" sofort wieder zu verlassen, da sonst die Gefahr einer ungewollten Programmschleife ensteht (zumindest bisher:))
An die Geschichte mit "Application.EnableEvents=False" habe ich nicht mehr gedacht. Ich hatte schon mal damit rumgespielt, hatte aber nie Erfolg, da ich mich damals auf der Event Ebene des Sheets befunden habe:( Ich glaube in diesem Fall funktioniert es damit deutlich besser und übersichtlicher.
Ich werde es auf jedenfall testen.
Danke für den Tipp
Heinrich
Anzeige
Danke für die Rückmeldung o.T.
ChrisL
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige