Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Workbook_beforeClose umgehen

Workbook_beforeClose umgehen
21.01.2008 11:51:00
Buerger
Hallo aus China :o)
ich verzweifle schon seit Tagen an einem VBA-Problem:
Ich habe einen VBA-Code, der eine Workbook_BeforeClose-Prozedur enthaelt. Nun moechte ich, dass nach dem Ansteuern einer bestimmten Prozedur X das aktive Excel-Dokument geschlossen wird:
actualfilename = Application.ActiveWorkbook.Name
Workbooks(actualfilename).Close
Das Problem: die Workbook_BeforeClose-Prozedur haengt sich hier immer auf, weil ich noch einen Wert in der zu schliessenden Datei speichern will.
Worksheets("milestones").Cells(4, 6).Value = Now
Dieser Wert muss aber nicht gespeichert werden, wenn ich die Prozedur X aufrufe.
1) Am besten waere es, wenn ich in der Prozedur X einen Befehl schreiben koennte, der das Ausfuehren der Workbook_BeforeClose-Prozedur verhindert. Kann mir jemand helfen?
2) Oder gibt es eine Alternative zum Close-Befehl, der die Workbook_BeforeClose-Prozedur vor dem Schliessen abarbeitet? (QUIT funktioniert leider nur fuer "Application").
Folgende Loesungen funktionieren nicht:
Loesung 1:
Application.quit
- Excel darf nicht geschlossen werden, weil ein anderes Dokument noch offen ist
Loesung 2:
if-then-Beziehung in der Workbook_BeforeClose-Prozedur (ich definiere in der Prozedur x, dass eine public-Variable=1 ist und setze den Inhalt der Workbook_BeforeClose-Prozedur in
if x=1 then
...
end if)
- funktioniert nicht, wahrscheinlich ist der Speicher schon geloescht. Alles zw. if und then wird immer abgearbeitet.
Besten Dank
Marco

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 11:58:56
Hajo_Zi
Hallo Marco,
wenn mit weniger Leerzeilen gearbeitet wird ist der Beiitrag übersichtlicher.
Definiere eine Varable
If BoVariable Then Cancel = True
ich vermute es ist Dir jetzt auch aufgefallen das man es scjlecht lesen kann,, falls Du bis hierher gelaufen bist
.

AW: Workbook_beforeClose umgehen
21.01.2008 12:23:12
Buerger
Hallo Hajo,
danke fuer die schnelle Antwort. Sorry fuer die Leerzeichen, aber das war mein erster Forumseintrag :o)
Hab es versucht mit If BoVariable Then Cancel = True, aber es hat nicht funktioniert. BoVariable ist meine Variable (so nehm ich es an). Diese habe ich platzsparend als Byte deklariert (private bovariable as byte) und dann habe ich in meine Prozedur X folgendes geschrieben bovariable=1 und dann in der Workbook_BeforeClose-Prozedur If BoVariable=1 Then Cancel = True. Auch habe ich dies in die Prozedur X kopiert, als es nicht funktioniert hat. Was ist falsch?
Danke
Marco

Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 12:45:00
Hajo_Zi
Hallo Marco,
ich vermute als Private ist falsch. Dein Makro läuft bestimmt in einem Modul also als Public definieren. Boolean war korrekt.
mit dem setzen ist das koorekt ich hätte aber BoVariable =True geschrieben.
Gruß Hajo

AW: Workbook_beforeClose umgehen
21.01.2008 16:18:58
Buerger
Hallo Hajo,
danke fuer die schnelle Antwort. Hmm, irgendwie komm ich nicht weiter. Sorry, das mit dem Private war natuerlich Quatsch ... ein Schreibfehler.
Nur zum Verstaendnis: Umgeht dein If bovariable=true then cancel=true die Worksheet_BeforeClose-Prozedur oder fuehrt sie dazu, dass die Prozedur richtig abgearbeitet wird (weil cancel=true)? Und in welche Prozedur soll ich das schreiben (x oder Worksheet_BeforeClose)?
Wenn ich das in meine Prozedur x schreibe, macht es doch keinen Sinn, wenn ich erst schreibe
BoVariable=true
ActiveWorkbook.Close
if BoVariable=true then cancel=true

dann kann ich doch gleich schreiben cancel=true.
Danke!
Marco

Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 16:20:58
Hajo_Zi
Hallo Marco,
die Zeile hast Du schon als erste Zeile in BeforeClose eingefügt?
Gruß Hajo

AW: Workbook_beforeClose umgehen
21.01.2008 16:30:00
Buerger
Hallo Hajo,
das geht ja wie im Flug mit der Antwort! DANKE!
Das Makro stoppt in Zeile 4 und sagt, dass die Zellen gesperrt sind. Dieser Fehler tritt aber nicht regulaer auf, sondern nur wenn ich in Prozedur X schreibe:
ActualWorkbook.Close
Und ich habe es ja in Zeile 3 entsperrt ... warum also der Fehler?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bovariable = True Then Cancel = True
Worksheets("milestones").Unprotect ("***")
Worksheets("milestones").Cells(4, 6).Value = Now
Worksheets("milestones").Protect ("***")
Application.Visible = False
Worksheets("Error").Visible = True
Worksheets("expenses").Visible = xlSheetVeryHidden
Worksheets("milestones").Visible = xlSheetVeryHidden
Worksheets("data").Visible = xlSheetHidden
ThisWorkbook.Save
End Sub


Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 16:35:00
Hajo_Zi
Hallo Marco,
die Zeile 4 hat aber nichts mit meinem Vorschlag zu tun?. Eine Datei sagt manchmal mehr als tausend Worte. Die Zeile 4 wird in meinem Fall nicht ausgeführt.
Gruß Hajo

AW: Workbook_beforeClose umgehen
21.01.2008 16:46:00
Buerger
Hallo Hajo,
noch ein Versuch:
zuerst habe ich definiert:
public bovariable as boolean
im Modul steht dann
...
bovariable = True
ActiveWorkbook.Save
ActiveWorkbook.Close
Workbooks.Open ("C:\xxx")
Workbooks(actualfilename).Close
End Select
End Sub

und dann in DieseArbeitsmappe steht der besagte Worksheet_BeforeClose-Befehl.
Marco

Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 16:57:00
Hajo_Zi
Hallo Marco,
die Variable ist aber nur im Modul definiert im Modul.
Ich habe es nochmal getestet schreibe für Cancel=True den Befehl Exit sub
Gruß Hajo

AW: Workbook_beforeClose umgehen
21.01.2008 17:17:00
Buerger
Hallo Hajo,
DANKE! Ich habe die Prozedur aus dem Modul in DieseArbeitsmappe kopiert und nun funktioniert es :o)
Beste Gruesse aus China und dir einen schoenen Abend. Bei uns ist es jetzt Mitternacht ...
Marco

AW: Workbook_beforeClose umgehen
22.01.2008 05:36:00
Buerger
Hallo,
zu frueh gefreut :o(
Meine Prozedur kann ich nicht in DieseArbeitsmappe kopieren. Ich habe das Makro nochmals getestet und es funktioniert nur im Modul.
Wie kann ich eine Variable aus einem Modul in DieseArbeitsmappe uebergeben?
So ein Code (wie Daniel ihn vorgeschlagen hat) waer ein Traum. Der muesste aber auch unter Excel2007 funktionieren ...
Danke!
Marco

Anzeige
AW: Workbook_beforeClose umgehen
22.01.2008 09:41:40
Hajo_Zi
Hallo Marco,
ich lehne es ab über das Internet auf fremde Rechner zu schauen. Darum sehe ich nicht wo Dein Code ist. Bei richtiger Stelle geht der Code auch. Ansonsten siehe Antwort auf Daniel sein Beitrag.
Gruß Hajo

AW: Workbook_beforeClose umgehen
22.01.2008 10:29:00
Buerger
Hallo Hajo,
das mit Saved=true hat nicht geholfen. Anbei mein Code ... Danke fuer deine Geduld :o)
Im Modul steht:
public BoVariable as Boolean (hab es auch in DieseArbeitsmappe probiert)
Sub AAA()
Dim pn As Integer
Dim actualfilename As String
...
actualfilename = Application.ActiveWorkbook.Name
ActiveWorkbook.Worksheets("data").Activate
pn = Worksheets("data").Cells(3, 9).Value
ActiveSheet.Columns("A:BT").Copy
Set fs = CreateObject("Scripting.FileSystemObject")
Select Case fs.FileExists("X:xxx")
Case False
....
Case True
BoVariable=true
Workbooks.Open ("X:\xxx")
ActiveWorkbook.Worksheets("data").Columns("A:BT").PasteSpecial xlPasteAll
ActiveWorkbook.Save
ActiveWorkbook.Close
Workbooks.Open ("X:\xxx")
Workbooks(actualfilename).Saved = True
Workbooks(actualfilename).Close
End Select
End Sub


In DieseArbeitsmappe steht:


Private Sub Workbook_BeforeClose(Cancel As Boolean)
If BoVariable = True Then Exit Sub
Worksheets("milestones").Unprotect ("xxx")
Worksheets("milestones").Cells(4, 6).Value = Now
Worksheets("milestones").Protect ("xxx")
ThisWorkbook.Save
Application.Visible = False
Worksheets("Error").Visible = True
Worksheets("expenses").Visible = xlSheetVeryHidden
Worksheets("milestones").Visible = xlSheetVeryHidden
Worksheets("data").Visible = xlSheetHidden
ThisWorkbook.Save
Application.Visible = True
End Sub


Anzeige
AW: Workbook_beforeClose umgehen
22.01.2008 10:54:00
Hajo_Zi
Hallo Marco,
für mich ist die Diskussion beendet. Ich habe nun schon paar mal geschrieben das ich nicht über das Internet auf fremde Rechner schaue bzw. das ich Deine Datei nicht sehe. Du willst es aber nicht beseitigen.
Bei Deinem Level gehe ich davon aus das Du den Code an die richtige Stelle kopiert hast. Was aus Deinen Beiträgen aber nicht sein kann. Dann versuche mal selber das Problem zu lösen.
Gruß Hajo

AW: Workbook_beforeClose umgehen
21.01.2008 22:46:00
Daniel
Hi
kleiner Tipp:
wenn du eine Datei per Makro schließen willst, ohne das das Before_Close-Makro ausgeführt wird, geht das einfach so

Application.EnableEvents = False
Workbooks("DeineDatei.xls").Close
Application.EnableEvents = True


Gruß, Daniel

Anzeige
AW: Workbook_beforeClose umgehen
21.01.2008 23:05:05
Hajo_Zi
Hallo Daniel,
ich wurde gerade vor kuzrzem darauf hingewiesen das Application.EnableEvents = True nicht mehr ausgeführt wird. Ich habe es jetzt nun nur in 2007 getestet.
Gruß Hajo

AW: Workbook_beforeClose umgehen
22.01.2008 00:06:25
Daniel
Hi
danke für den Hinweis.
bedeutet das, das zukünftig alle Events über Abfrage einer Steuervariable im Code selbst deaktiviert werden müssen, so wie es in ExcelXP schon bei den Userform-Events ist?
das wäre aber ne ziemliche Umstellnung
da muss dann einiges an Code umgeschrieben werden.
Gruß, Daniel

Anzeige
AW: Workbook_beforeClose umgehen
22.01.2008 09:39:00
Hajo_Zi
Hallo Daniel,
es gibt auch die Möglichkit .Saved = True, dann wird BeforeClose auch nicht ausgeführt, da Datei nicht verändert. Das habe ich jetzt aber nicht getestet.
Gruß Hajo

AW: Workbook_beforeClose umgehen
22.01.2008 20:19:00
Daniel
Hi
verwechselst du hier nicht BeforeSave mit BeforeClose ?
Gruß, Daniel

AW: Workbook_beforeClose umgehen
22.01.2008 22:23:00
Hajo_Zi
Hallo Daniel,
das kann man auch in dem Makro schreiben.
Gruß Hajo

AW: Workbook_beforeClose umgehen
23.01.2008 01:15:56
Daniel
Hi
also ich bin mir ziemlich sicher, das BeforeClose auch dann ausgeführt wird, wenn .Saved = True ist.
Gruß, Daniel
Anzeige

85 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige