Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
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
Inhaltsverzeichnis

BeforeSaveAsUI

BeforeSaveAsUI
02.01.2009 12:40:03
Peter
Hallöchen zusammen,
ich wünsche allen Exclern eine Frohes Neues Jahr 2009!!!!
Ich hab da ein kleines Logikproblem.
Wenn meine Datei gespeichert wird, rufe ich folgendes Makro auf:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox ("Bitte warten!" & chr13 & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
Me.ChangeFileAccess xlReadWrite
End If
Application.DisplayAlerts = False
Sheets("Gesamt").Activate
Call Jahresberechnungin
Call blaetter
Calculate
Sheets("Gesamt").Activate
Me.ChangeFileAccess xlReadOnly
Application.DisplayAlerts = True
End Sub


Es funktioniert bis auf eine Kleinigkeit alles einwandfrei!
Er ruft dieses Makro zweimal hintereinander auf!
Sprich, er läuft es einmal durch und fängt dann wieder bei msgbox neu an, obwohl ich überprüft habe, dass in den beiden anderen Makros keine save-Anweisungen mehr sind. Da diese Berechnungen recht Zeitaufwendig sind, und im Laufe des Jahres immer mehr Zeit in Anspruch nehemen, ist es Blödsinn, dass er alles doppelt macht!
Hat jemand zufällig ne Idee, woran das liegen könnte?
Gruß und vielen Dank!
Peter R.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforeSaveAsUI
02.01.2009 12:47:26
René
Hallo Peter
Ich würde die ReadOnly Abfrage als Öffnungsabfrage separat schreiben, sprich wenn das Workbook geöffnet wird auf beschreibbar setzen.
Die Anweisung die Mappe wieder nur lesbar zu setzen ist ja eh nur notwendig wenn sie ein anderer als du öffnet.
Gruß René
AW: BeforeSaveAsUI
02.01.2009 12:48:00
Daniel
Hi
so direkt nicht.
setze mal in dem Makro einen Haltepunkt (links auf den grauen Rand des Codefensters klicken) und starte das Makro (speichern). Der Ablauf stoppt am Haltepunkt und du kannst von dort aus das Makro im Einzstep-Modus durchgehen (F8 oder der entsprechende Schalter in der Menüleiste "Debuggen").
vielleicht bekommst du dann einen Hinweis, wo das Problem liegen könnte.
Gruß, Daniel
Anzeige
AW: BeforeSaveAsUI
02.01.2009 12:50:00
René
Nochmal Hallo
So meinte ich eben.

Private Sub Workbook_Open()
MsgBox ("Bitte warten!" & chr13 & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
Me.ChangeFileAccess xlReadWrite
End If
End Sub


Gruß René

AW: BeforeSaveAsUI
02.01.2009 12:55:13
Peter
Hallo an Euch beide,
vielen Dank für die Ratschläge.
Zu Daniel:
Hab ich schon ausprobiert. Sobald das Makro Blätter fertig ist, springt er wieder auf den Punkt BeforSave.
Also keinen Hinweis, warum.
Zu René:
Die Eigenschaft muss die ganze Zeit vorherrschen. Soll heißen, beim öffnen wird schon überprüft, ob schreibgeschützt ist oder nicht, wenn nicht, dann Schreibschutz setzen. Beim Speichern muss ich dann aber doch den Schreibschutz rausnehmen. Ich bin übrigens nicht der einzige, der auf diese datei zugreift, aber der einzige, der diese Datei ändern darf.
Gruß
Peter
Anzeige
AW: BeforeSaveAsUI
02.01.2009 13:01:48
Peter
Hallo nochmal zusammen,
hab jetzt doch noch was rausgefunden:
Beim setzen des Schreibschutzes in der vorletzten Zeile des Codes springt er wieder auf den Anfang.
Wie kann ich das abfangen, und ihm sagen, das schon gespeichert wurde?
Gruß
Peter R.
AW: BeforeSaveAsUI
02.01.2009 13:11:46
Daniel
Hi
probier mal das hier:

Public xxx as boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
if xxx then exit sub
xxx = true
MsgBox ("Bitte warten!" & chr13 & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
Me.ChangeFileAccess xlReadWrite
End If
Application.DisplayAlerts = False
Sheets("Gesamt").Activate
Call Jahresberechnungin
Call blaetter
Calculate
Sheets("Gesamt").Activate
Me.ChangeFileAccess xlReadOnly
Application.DisplayAlerts = True
xxx = False
End Sub


oder das hier:


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox ("Bitte warten!" & chr13 & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
Me.ChangeFileAccess xlReadWrite
End If
Application.DisplayAlerts = False
Sheets("Gesamt").Activate
Call Jahresberechnungin
Call blaetter
Calculate
Sheets("Gesamt").Activate
Application.EnableEvents = False
Me.ChangeFileAccess xlReadOnly
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub


Gruß, Daniel

Anzeige
AW: BeforeSaveAsUI
02.01.2009 13:12:24
Hajo_Zi
Hallo Peter,
benutze doch eine Variable.

Option Explicit
Dim BoSpeichern As Boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If BoSpeichern Then Exit Sub
BoSpeichern = True
MsgBox ("Bitte warten!" & chr13 & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
Me.ChangeFileAccess xlReadWrite
End If
Application.DisplayAlerts = False
Sheets("Gesamt").Activate
Call Jahresberechnungin
Call blaetter
Calculate
Sheets("Gesamt").Activate
Me.ChangeFileAccess xlReadOnly
Application.DisplayAlerts = True
BoSpeichern = False
End Sub



Anzeige
AW: BeforeSaveAsUI
02.01.2009 13:42:00
Peter
Hallo Hajo,
vielen Dank für den Ansatz. Funktioniert natürlich tadellos! :-) War auch nicht anders zu erwarten.
Aber mir ist inzwischen ein Logikproblem meinerseits aufgefallen.
Wofür macht man den Schreibschutz in eine Datei, wenn dieser dann beim Speichern wieder rausgenommen wird?
Hab mir meinen Code inzwischen etwas umgebastelt und funktioniert auch. Eine Variable hatte ich ja schon deklariert (Cancel).

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ant As Variant
Application.DisplayAlerts = False
MsgBox ("Bitte warten!" & Chr(13) & "Ich berechne die Daten neu!")
If ThisWorkbook.ReadOnly = True Then
ant = MsgBox("Sie haben keine Berechtigung zum Speichern!" & Chr(13) & "Bitte verwenden Sie  _
das Ihnen mitgeteilte Passwort!", vbOKOnly)
If ant = vbOK Then
Cancel = True
Exit Sub
End If
Else
Application.DisplayAlerts = False
Sheets("Gesamt").Activate
Call Jahresberechnungin
Call blaetter
Calculate
Sheets("Gesamt").Activate
End If
Application.DisplayAlerts = True
End Sub


Trotzdem vielen Dank an alle.
Gruß
Peter

Anzeige
AW: BeforeSaveAsUI
02.01.2009 13:44:12
Hajo_Zi
Hallo Peter,
ich würde keine Variablennamen benutzen die Excel schon benutzt.
Gruß Hajo
AW: BeforeSaveAsUI
02.01.2009 13:59:00
Peter
Hallo Hajo,
vielen Dank nochmal.
Befinde mich leider noch an den Anfängen der "schönen" Programmierung.
Bei mir sind mit Sicherheit viele Dinge noch doppelt gemoppelt.
Aber solange es funktioniert? Um die Schönheit kann man sich danach kümmern.
Gruß
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige