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

speichern

speichern
tobi
moin
habe folgendes Problem,
ich habe eine Datei die ich als Vorlage nutzen möchte und
brauche nun ein Makro, mit dem ich wenn ich auf speichern gehe die Datei gespeichert wird aber ohne das erste Tabellenblatt. Die Datei hat 12Tabellenblätter und einige von denen sind ausgeblendet, und sollen das auch bei der Kopie bleiben.
gruss tobi
AW: speichern
Matthias
Hallo Tobi,
folgenden Code in "DieseArbeitsmappe":

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Tabelle1").Delete
Application.DisplayAlerts = False
On Error GoTo 0
End If
End Sub

anschließend die Mappe speichern (Name sollte vorher vergeben sein!), schließen und die Datei schreibgeschützt setzen (Rechtklick im Explorer - Eigenschaften).
Dies ist nun deine Vorlage.
Beim nächsten Speichern erkennt Excel den Schreibschutz und fordert zur Eingabe einer neuen Datei auf. Die erkennt der obige Code (SaveAsUI = True) und löscht das erste Blatt (Namen im Code evtl. anpassen).
Alles klar?
Gruß Matthias
Anzeige
AW: speichern
tobi
Hallo Matthias
das klappt wunderbar, aber du warst etwas zu schnell für mich. die Bedingungen haben sich ein wenig geändert. auf dem ersten Blatt in meiner (Vorlage)-Datei habe ich einen Button, dem ich ein Makro zugewiesen habe:

Sub SpeichernUnterDialogAufrufen()
Dim Auswahl As Byte
Auswahl = MsgBox("Haben Sie schon gespeichert?", vbOKCancel)
If Auswahl = 2 Then
Exit Sub
End If
Application.Dialogs(xlDialogSaveAs).Show
Sheets("Projekt").Select
End Sub

Kann ich jetzt einfach deinen Text mit einfügen?
Gruss tobi
AW: speichern
Matthias
Hallo Tobi,
Ist es nicht ein wenig unelegant, den Benutzer angeben lassen zu müssen, ob die Datei schon gespeichert wurde? Man sieht es doch daran, ob das erste Blatt noch existiert oder nicht, und die Vorlagedatei kann nicht überschrieben werden, wenn sie schreibgeschützt ist.
willst Du das erste Speichern nach Öffnen der Vorlage nur über diesen Button erlauben? Was soll passieren, wenn der Benutzer den Speichern-Knopf in der Symbolleiste oder im Menü wählt?
Wozu ist das erste Blatt noch gut, außer dass es diesen Button beinhaltet?
Fragen über Fragen, aber bevor ich mich in sinnlose Arbeit stürze, warte ich erst mal Deine Antwort ab.
Grüße,
Matthias
Anzeige
AW: speichern
tobi
hallo Matthias
ich wollte die Datei nur Idiotensicher machen ... und den Startbutton dafür nutzen, das wenn der User noch nicht unter einen Neuen Namen gespeichert hat, er daran errinnert wird.
Das erste Blatt ist nur dafür da die allgemeinen Dinge zu erklären, und deshalb soll es auch nicht mit in die neue Datei rein.
vielleicht hast du noch eine andere Iddee, wie man das eleganter lösen könnte?
Gruss tobi
AW: speichern
Matthias
Hallo Tobi,
wenn Du gewährleisten kannst, dass die Vorlage schreibgeschützt ist und bleibt, kann dies Kriterium sein ob die Vorlage schon gespeichert wurde oder nicht. (If ThisWorkbook.ReadOnly...)
Mann könnte auch den Pfad oder Namen der Datei prüfen, ob er mit der Vorlagendatei übereinstimmt.(If ThisWorkbook.Path=... / ThisWorkbook.Name=...)
Oder eben einfach schauen, ob die Startseite, die ja nur bei der Vorlage existiert, vorhanden ist.(If Sheets(1).Name=...)
Oder alles zusammen ;-)
Wie hättest Du es denn gerne? Machbar ist (fast) alles...
Gruß Matthias
Anzeige
AW: speichern
tobi
ich nehme das dritte, er soll prüfen ob die erste Seite vorhanden ist oder nicht.
Ich meine es ist sinnvoller, wenn auf dem Button die MsgBox nur anspringt wenn noch NICHT gespeichert wurde?
gruss tobi
AW: speichern
Matthias
Hallo Tobi,
der Button existiert nur auf der ersten Seite. Wenn die Datei gespeichert wurde, gibt's den doch gar nicht mehr.
Ich bräuchte noch:
- den Namen des ersten Tabellenblattes (das gelöscht werden soll)
- (falls nötig) den Default-Speicherpfad für die Dateien
Gruß Matthias
AW: speichern
tobi
Das erste Blatt heißt "Stückliste_anlegen"
aber er nimmt ja keine Umlaute also hab ich es mit (1) gemacht!?
Speicherpfad ist unrelevant,
was noch gut wäre wenn die neue Datei die gespeichert wird mit Kunde anfängt, und nich mit Kopie ...
gruss tobi
Anzeige
AW: speichern
Matthias
Hallo Tobi,
ich bin grade auf ein größeres Problem gestoßen, weshalb ich mir jetzt meinerseits versuche, Hilfe zu holen :-)
https://www.herber.de/forum/messages/412281.html
Also Geduld, Du kannst ja zwischenzeitlich den Code auch mal testen.
Gruß Matthias
AW: speichern
tobi
hallo Matthias, hast du schon eine Lösung gefunden
habe unter den Link geguckt den du ins Forum gestellt hast und den Code eingefügt (bis auf das was nicht mit rein sollte)
Funktioniert nicht, habe es unter dieseArbeitsmappe eingefügt, muß ich dann noch das Makro von dem Button entfernen?
Gruss tobi
Anzeige
AW: speichern
Matthias
Hallo Tobi,
das Makro und den Button brauchst Du eigentlich nicht mehr.
Was funktioniert denn nicht?
Gruß Matthias
AW: speichern
tobi
es kommt immer noch das die MsgBox die ich erstellt habe, sonst passiert nix.
wollte die Datei hochladen, aber anscheinend funktioniert das nicht mehr?! Kann ich dir Datei rüber mailen?
gruss tobi
AW: speichern
Matthias
Hallo Tobi,
Du brauchst KEINEN Code mehr außer diesem (noch mal ein klein wenig überarbeitet):

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim s
If Sheets(1).Name <> "Stückliste_anlegen" Then Exit Sub
' Vorlagendatei: erstes Blatt löschen
Do
'Dateiname abfragen (nicht Vorlagendatei!)
s = Application.GetSaveAsFilename(InitialFileName:="Kunde", fileFilter:="Excel-Arbeitsmappe, *.xls")
If s = ThisWorkbook.FullName Then
MsgBox "Dies ist die Vorlagendatei!" & Chr(10) & _
"Diese dürfen Sie nicht überschreiben!" & Chr(10) & Chr(10) & _
"Bitte wählen Sie eine andere Datei.", vbCritical
End If
Loop Until (s <> ThisWorkbook.FullName) Or s = False
Cancel = True
If s = False Then
MsgBox "Abbruch! Datei wurde nicht gespeichert."
Else
'Blatt löschen
Application.DisplayAlerts = False
Sheets("Stückliste_anlegen").Delete
Application.DisplayAlerts = True
'Mappe speichern
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=s
Application.EnableEvents = True
End If
End Sub

Das Speichern geht ganz normal über den Speichern-Knopf oder in Menü Datei-Speichern.
Der ogige Code gehört in "DieseArbeitsmappe" (wichtig!)
Wenn Du die Vorlage speichern willst (als Administrator sozusagen), brauchst Du eine kleine Sub in einem normalen Modul:
Sub Vorlage_Speichern()
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = False
End Sub
Weil das "normale" Speichern abgefangen wird und dabei dann das erste Blatt gelöscht wird...
Gruß Matthias
Anzeige
AW: speichern
tobi
er reagiert nich auf das Makro, habe es unter DieseArbeitsmappe eingefügt und gespeichert.
Wenn ich dann auf speichern gehe Speichert die Datei ganz Normal incl. der ersten Seite
gruss tobi
AW: speichern
Matthias
Hallo Tobi,
gib mal im Direktfenster ein:
Application.EnableEvents = True
hier hab ich meine Beispieldatei mal hochgeladen:
https://www.herber.de/bbs/user/5189.xls
Gruß Matthias
AW: speichern hat geklappt
tobi
habe hin bekommem, der Fehler lag an dem Umlauten, die mag Excel/Vba nicht
habe die Tabelle Stücklist ... nach Tabelle1 umbenannt und dann hat es funktioniert.
jetzt nur noch ein Problem:
habe veide Makros eingefügt unter DieseArbeitsmappe, aber jetzt kann ich nicht mehr das Orginal/Vorlage abspeichern, er will jetzt die Datei immer unter Kunde abspeichern.
Hilfe
gruss tobi
Anzeige
AW: speichern hat geklappt
Matthias
Hallo Tobi,
ist ja seltsam, mein Excel hat keine Probleme mit den Umlauten im Blattnamen...
Um die Mappe als Vorlage zu speichern, musst Du folgende Prozedur einsetzen:

Sub Vorlage_Speichern()
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
End Sub

Diese Sub in ein normales Modul!
Wenn die Events eingeschaltet bleiben, wird - wie gesagt - der Code ausgeführt. Wenn die Events aus sind, dann nicht :-)
Gruß Matthias
klappt alles wunderbar
tobi
klappt alles wunderbar.
ich danke dir das du für mich deinen Tag geopfert hast.
gruss tobi
Anzeige
AW: klappt alles wunderbar
Matthias
Hallo Tobi,
naja, den ganzen Tag ja nicht... ;-)
Vielen Dank für die Rückmeldung und schönen Abend noch!
Gruß Matthias
AW: klappt alles wunderbar
tobi
hallo Matthias
trau mich gar nicht mehr zu fragen, aber eins habe ich noch.
und zwar wenn ich auf den Button auf der ersten Seite klicke, kommt der Dialog das sie erst speichern müssen ... dann geht das Fenster zum speichern auf. dann habe ich gespeichert und das Tabellenblatt springt um, aber die Datei ist immer noch die Vorlagedatei in der ich arbeite, aber eigentlich sollte das die Datei Kunde.. sein!?
Bitte helf mir noch einmal. danke
gruss tobi
Anzeige
AW: klappt alles wunderbar
Matthias
Hallo Tobi,
welches Makro fürhrt denn dieser olle Button aus? Wozu brauchst Du den denn noch? (Oder ist es meiner aus der Beispieldatei? Der ist nur zu Demonstrationszwecken gedacht...)
Übrigens, das mit dem Schreibschutz ist nicht mehr nötig, ich weiß nicht wie der Code darauf reagiert...
Gruß Matthias
AW: klappt alles wunderbar
tobi
aber da muß doch was hin. der User muß doch irgenwie Starten.
in dem Makro steht

Sub SpeichernUnterDialogAufrufen()
Dim Auswahl As Byte
Auswahl = MsgBox("Bevor Sie mit der Eingabe beginnen müssen Sie zuerst Speichern!", vbOKCancel)
If Auswahl = 2 Then
Exit Sub
End If
Application.Dialogs(xlDialogSaveAs).Show
Sheets("Projekt").Select
End Sub

klappt ja auch soweit ausser das er in der Vorlage weiterarbeitet.
gruss tobi
AW: klappt alles wunderbar
Matthias
Hallo Tobi,
Was muss der User starten?
Es startet den von mir geposteten Code, indem er die Mappe speichern will und auf das Save-Icon klickt.
Und er kann damit auch erst eingeben und dann speichern, die Reihenfolge ist doch egal :-)
Gruß Matthias
AW: klappt alles wunderbar
13.04.2004 00:47:40
tobi
die erste Seite ist doch die Startseite und der User er legt die Datei für einen neuen Kunden an.Entweder über SPEICHERN oder über den BUTTON.Klappt ja auch soweit ausser das er beim Klick auf den Button weiterhin in derVorlage ist.
Es kommt die erste MSGBOX "erst speichern ... und beim Abruch die zweite von "Abruch durch den Benutzer ...
gruss tobi
AW: klappt alles wunderbar
Matthias
Hallo Tobi,
Leg' doch einfach folgenden Befehl hinter den Button:
ThisWorkbook.Save
Alles weitere dürfte dann mein Makro erledigen...
Gruß Matthias
AW: klappt alles wunderbar
tobi
dann öffnet er das Dialogfeld zum speichern, speichert aber nicht?!
und geht auch nicht auf die zweite SEITE.
wenn ich ihm noch hinterlegen Sheets("Projekt").Select
dann kommt der Dialog zum speichern, speichert aber nicht und er wechselt auf die zweite Seite aber in der Vorlage?
gruss tobi
AW: lad' mal hoch,,,
Matthias
Hallo Tobi,
lade das Teil mal hoch, langsam verlier' ich den Überblick ;-)
oder wenn upload nicht geht mail an matthias.goessner(at)gmx.de
Gruß Matthias
AW: lad' mal hoch,,,
Matthias
Hallo Tobi,
ich hab die Datei erhalten, werde mich aber erst morgen damit beschäftigen (gähn!),
schlaf gut!
Matthias
AW: lad' mal hoch,,,
is
.
AW: konnte es doch nicht lassen...
13.04.2004 02:43:01
Matthias
...und hab alles nochmal umgekrempelt: (müde hin müde her ;-)
Die BeforeSaveMethode blockiert nun lediglich den Speicherversuch der Vorlage:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Vorlage darf nicht gespeichert werden
If Sheets(1).Name = ("Tabelle1") Then
MsgBox "Die Vorlage kann nicht gespeichert werden!"
Cancel = True
End If
End Sub

Und dein Modul14 sieht nun so aus:
Sub SpeichernUnterDialogAufrufen()
Dim s
If MsgBox("Bevor Sie mit der Eingabe beginnen müssen Sie zuerst Speichern!", vbOKCancel) _
= vbCancel Then Exit Sub
' Schleife, solange die Vorlagendatei angegeben wird
Do
s = Application.GetSaveAsFilename(InitialFileName:="Kunde", fileFilter:="Excel-Arbeitsmappe, *.xls")
If s = ThisWorkbook.FullName Then
MsgBox "Dies ist die Vorlagendatei!" & Chr(10) & _
"Diese dürfen Sie nicht überschreiben!" & Chr(10) & Chr(10) & _
"Bitte wählen Sie eine andere Datei.", vbCritical
End If
Loop While s = ThisWorkbook.FullName
'Klick auf "Abbrechen"?
If s = False Then Exit Sub

'Blatt löschen
Application.DisplayAlerts = False
Sheets("Tabelle1").Delete
Application.DisplayAlerts = True
'Mappe speichern:
'Fehler abfangen, wenn Benutzer bei evtl. Frage nach Überschreiben auf "Nein" oder "Abbrechen" klickt
On Error GoTo NichtGespeichert
ThisWorkbook.SaveAs Filename:=s
On Error GoTo 0
Sheets("Projekt").Select
Exit Sub
NichtGespeichert:
'Fehler: Datei nicht gespeichert, aber Blatt 1 schon gelöscht
MsgBox "Die Datei konnte nicht gespeichert werden!", vbCritical, "Fehler"
Application.DisplayAlerts = False
'Mappe neu öffnen, bisherige Änderungen verwerfen
Workbooks.Open ThisWorkbook.FullName
MsgBox Application.DisplayAlerts
End Sub
Wenn der Benutzer eine vorhandene Datei auswählt und die Frage nach dem Überschreiben verneint, wird die Mappe unter Verwerfen der Änderungen (Blatt 1 wurde ja schon gelöscht) neu geöffnet. Um die Abfrage zu umgehen, setze ich DisplayAlerts auf False.
Grüße,
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige