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

An Hajo (Und alle)

An Hajo (Und alle)
13.11.2002 16:38:20
Lutz
gibt zu meiner Frage (before close) jetzt noch ein anderes Problem. Habe in meiner UserForm1 einen Abbrechen-Button, der ohne Speicherfrage alles schließt (siehe unten). Nun tut er es aber nicht mehr, es bleibt "Start" stehen und es erscheint die Frage, ob speichern.
Gibt es einen Lösungsvorschlag ?


Private Sub CommandButton1_Click()
ThisWorkbook.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub

32
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: An Hajo (Und alle)
13.11.2002 16:49:52
Michael Scheffler
Hast Du schon mal die Saved-Eigenchaft auf True gesetzt?
Re: An Hajo (Und alle)
13.11.2002 16:51:43
Felix
Hallo Lutz,
versuche dieses einmal mit einzugeben (im Module Workbook)

Private Sub CommandButton1_Click()
ThisWorkbook.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub

und mit

Workbook beforeClose
If CommandButton1 = true then cancel =true
End Sub
Ich Habe es aus dem Kopf geschrieben aber so ähnlich sollte es funktionieren.
Gruß
Felix


Re: An Hajo (Und alle)
13.11.2002 16:54:11
Felix
korrigiere

Workbook beforeClose
muß heißen
Workbook beforeSave

Anzeige
Re: An Hajo (Und alle)
13.11.2002 17:01:19
Nepumuk
Hallo Luzt

du musst die Userform vorher entladen. Entweder mit:

Me.Hide

oder

Unload Me

Gruß
Nepumuk

Re: An Hajo (Und alle)
13.11.2002 17:03:39
Lutz
Hallo Felix
hab ich gemerkt...ging nämlich nicht. Bevor ich die zweite Möglichkeit teste...ich habe mehrere UserForms und dementsprechen mehrere CommandButton1. Wie kriege ich das hin ???
Re: An Hajo (Und alle)
13.11.2002 17:10:27
Lutz
Hallo Nepumuk

da ändert sich nichts

Re: An Hajo (Und alle)
13.11.2002 17:13:24
Felix
Hallo Lutz,
ich wollte auch einmal jemanden helfen. Da die anderen aber immer so schnell sind habe ich einige flüchtigkeitsfehler gemacht.

Private Sub CommandButton1_Click()
unload.me 'oder Userform.hide ERGÄNZEN
ThisWorkbook.Saved = True 'HERAUSNEHMEN
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub

und mit

und natürlich nur diesen Code in das Workbook:

Sub Workbook_Open
If CommandButton1 = true then cancel =true
End Sub

Sorry, ich muß wohl mich erst einmal weiterhin zurückhalten bis
ich etwas sicherer bin.
Gruß
Felix



Anzeige
Re: An Hajo (Und alle)
13.11.2002 17:31:04
Lutz
Hallo Felix

bin totaler VBA-Anfänger und froh, hier Hilfe zu finden...auch wenn es manchmal nicht gleich funktioniert. Danke also erstmal für Deine Hilfe !
Trotzdem hat sich noch nix geändert. Meine Code sehen jetzt so aus:

Private Sub Workbook_Open()
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
UserForm1.Show
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub

Private Sub CommandButton1_Click()
UserForm1.Hide
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub

Wenn Du vielleicht noch ne Idee hättest ???

Anzeige
Re: An Hajo (Und alle)
13.11.2002 17:44:35
Felix
Hallo Lutz,
die Zeile
If UserForm1.CommandButton1 = True Then Cancel = True
soltest Du in

Private Sub Workbook_bevorClose()

legen und aus der open herausnehmen, wie siehts dann aus.

kann es leider nicht selbst ausprobieren da ich momentan kein zweiten Rechner habe. Auf diesem ist kein EXCEL

Gruß
Felix

Re: An Hajo (Und alle)
13.11.2002 17:50:30
Felix
Hallo Lutz,
es tut mir wirklich Leid ich bin wirklich zu blöd.
Nun ist es mir schon wieder passiert.

Private Sub Workbook_bevoreSave()
muß es natürlich heißen da Du ja die abspeicherfrage verhindern willst.

Re: An Hajo (Und alle)
13.11.2002 17:57:59
Lutz
Hi Felix

nach wie vor kommt die Frage, ob speichern oder nicht.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub


Ich geb´s bald auf. Es funktionierte ja schon mal, erst seit ich den Part mit Blätter aus- und einblenden dazugebracht habe, geht´s net mehr....ratlos bin

Gruß
Lutz

Anzeige
Re: An Hajo (Und alle)
13.11.2002 18:03:20
Lutz
nee, geht och nich...immer noch die Frage...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub

Re: An Hajo (Und alle)
13.11.2002 18:13:00
Felix
Oh je, Oh je,
das mit der Kommunikation ist immer so eine Sache mache alles Rückgängig

Und mache es so.

Private Sub Workbook_BeforeSave(Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub


Den folgenden Cod hattest Du glaube ich in der Open stehen.

Private Sub Workbook_Open()
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
UserForm1.Show
End Sub

Und denke daran, gebe nie auf und wenn es noch so schwer ist.
Ich bin auch noch ein Anfänger wie Du siehst.
Aber man lernt jedes mal etwas dazu.
Mein letztes Makro habe ich auch verbissen mit einem Forum und eigener Arbeit in 60 Std geschrieben. Aber nun läuft es und ich bin stolz wie Oskar

Gruß

Felix

p.s. Kopf hoch

Anzeige
Re: An Hajo (Und alle)
13.11.2002 18:20:07
Lutz
nee, hatte ich schon probiert (meine Antwort von 18.03 Uhr)...immer noch ohne Erfolg
Re: Jetzt aber
13.11.2002 18:40:05
Felix
Tut mir Leid Lutz
Jetzt gebe ich dir eine Antwort die bei mir lief

Habe dieses Laufwerk ausgeschaltet und anderes Laufwerk eingelegt und ausprobiert. Bei mir lief es.
Wie siehts bei Dir aus? Sonst weiß ich auch nicht mehr.

Option Explicit

'DEIN "Schließen Button ohne Speicherabfrage" doppelt anklicken und Code einfügen

Private Sub CommandButton1_Click() Dim wks
'wks = Worksheets
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
ActiveWorkbook.Close
End Sub

Und diesen Code in "Diese Arbeitsmappe"

Option Explicit


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub


Anzeige
Re: Jetzt aber
13.11.2002 18:43:45
Lutz
werd´s mal testen....melde mich wieder
Re: Jetzt aber
13.11.2002 19:00:29
Felix
Hallo Lutz,
also wenn Du nur schließen ohne speichern haben willst
braucht Du eigentlich nur die folgenden beiden Codes

Private Sub CommandButton1_Click()
ActiveWorkbook.Close
End Sub

Und diesen Code in "Diese Arbeitsmappe"

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub


Woher diese Dinge kommen weiß ich nicht mehr. Waren die in der
Workbook_Open? Dann bringe Sie wieder dort hin.

For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
Gruß
Felix

p.s. Ich hoffe ich habe Deine Geduld nicht zu doll strapaziert.


Anzeige
Re: Jetzt aber
13.11.2002 19:21:53
Lutz
Das Problem ist folgendes: bevor ich Excel ohne Speichern schließe, überprüfe ich, ob andere Arbeitsmappen geöffnet sind. in diesem Fall wird nur meine Mappe ungespeichert geschlossen.
Der Code dazu ist dieser:

Private Sub CommandButton1_Click()
ThisWorkbook.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub

Bis dato ging auch alles. Dann habe ich die Geschichte mit dem Aus-und Einblenden der Blätter reingebracht, damit bei Nichtaktivierung der Makros nur ein Hinweisblatt erscheint.
Und dann war halt nix mehr mit ungespeichert schließen...
Auch dazu nochmal die Codes:

Private Sub Workbook_Open()
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
UserForm1.Show
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
End Sub


Kannst meine Geduld ruhig weiter strapazieren....bin froh, wenn überhaupt noch einer mit dranbleibt

Gruß
Lutz

Anzeige
Re: Jetzt aber
13.11.2002 20:10:33
Felix
Hallo Lutz,
nun sollte es Deinen ansprüchen genügen:

Option Explicit

Folgendes in Diese Arbeitsmappe

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub

'Private Sub Workbook_Open()
'Dim wks
'For Each wks In ActiveWorkbook.Sheets
'If wks.Name <> "Werte" Then
'wks.Visible = True
'Else
'wks.Visible = xlVeryHidden
'End If
'Next
'UserForm1.Show
'End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
End Sub

Und dieses jeweils mit Doppelklick der jeweiligen Button

Option Explicit

Private Sub CommandButton1_Click()
If Workbooks.Count = 1 Then Application.Quit
If Workbooks.Count > 1 Then ThisWorkbook.Close
End Sub


Private Sub CommandButton2_Click()
Me.Hide
End Sub

Viel Spaß damit

Ich weiß nur nicht warum Du beim schließen alle Blätter außer "Start" unsichtbar machst und beim öffnen wieder alles revedierst. Wahrscheinlich solltest Du da noch einmal nachsehen.
Gruß
Felix

Anzeige
Re: Jetzt aber
13.11.2002 20:11:43
Nepumuk
Hallo Lutz
nur nicht verzweifeln!!!!! Das Problem ist, dass nach der Anweisung "ThisWorkbook.Saved = True" noch Anweisungen kommen (Bätter ein- und ausblenden) die diese Anweisung wieder auf False setzen. Bei meiner ersten Antwort war mir nicht klar, dass du noch eine BeforeClose Routine durchläufst. Die Lösung:
Deklariere eine öffentliche Variable von Wert Boolean.
Setze diese durch dein Commanbutton_click Ereigniss auf True.
In die selbe Routine die Anweisung Thisworkbook.Close
In die BeforeClose-Routine kommt als letztes die Anweisung:
If deine_Variable = True Then Thisworkbook.Close

Die BeforeSave Routine wird benötigt um das speichern einer Mappe über den Speicherbutton zu verhindern. Wobei die Variable SaveAsUI dann True ist, wenn der Anwender auf Speichern-unter im Menü klickt. Damit kann man unterbinden,dass die Mappe unter einem anderen Namen oder in einem anderen Ordner gespeichert wird.

Gruß
Nepumuk


Re: Jetzt aber
13.11.2002 20:15:37
Nepumuk
Hoppla
Riesenfehler!! In die BeforClose Routine kommt natürlich die Anweisung - Thisworkbock.saved = True
Gruß
Nepumuk
Re: Jetzt aber
14.11.2002 08:44:47
Felix
Hallo Nepumuk,
hattest du dich auf meinen Vorschlag mit den Riesenfehler bezogen?

"In die BeforClose Routine kommt natürlich die Anweisung - Thisworkbock.saved = True"

Ich habe das Problem mit Cancel gelöst. Und zwar, wenn er auf den Abbrechenbutton klickt, ist Cancel=true (siehe in der folgendem Absatz)und dann wird auch ungespeichert geschlossen.

If UserForm1.CommandButton1 = True Then Cancel = True

Gruß
Felix

Re: Jetzt aber
14.11.2002 17:43:05
Nepumuk
Hallo Felix,
nein, sondern auf meinen eigenen Beitrag.
Gruß
Nepumuk
Re: Jetzt aber
14.11.2002 17:43:05
Nepumuk
Hallo Felix,
nein, sondern auf meinen eigenen Beitrag.
Gruß
Nepumuk
Re: Jetzt aber
14.11.2002 18:10:11
Lutz
Hallo Nepumuk,

habe Deinen Tip mal umgesetzt, aber noch immer wird abgefragt, ob speichern oder nicht. Hier nochmal meine jetzigen Codes:

In der UserForm:

Private Sub CommandButton1_Click()
Worksheets("Start").Visible = True
Dim wks
'wks = Worksheets
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
eos = True
ThisWorkbook.Close

End Sub


In Diese Arbeitsmappe:

Public eos As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
If eos = True Then Thisworkbock.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub


Kannst Du nochmal nachschauen ???

Re: Jetzt aber
14.11.2002 18:21:18
Nepumuk
Hallo Felix,
wenn du diesen Code aus deiner Mappe kopiert hast, dann ist klar warum er nicht funktioniert. Schau mal diese Zeile an:

If eos = True Then Thisworkbock.Saved = True

Sollte heißen: Thisworkbook

Geh im VBA-Editor auf Extras - Optionen und mach bei Variablendeklaration erforderlich einen Haken. Jedes neue Modul das du öffnest wird als erste Zeile Option Explicit stehen haben. Dann kann dir sowas nicht mehr passieren. Es schadet auch nicht, wenn du es nachträglich in deine Module einfügst.

Gruß
Nepumuk

Re: Jetzt aber
14.11.2002 18:29:34
Lutz
Hallo Nepumuk,

habe den Fehler berichtigt, Haken gesetzt...und immer noch die Meldung....

Gruß
Lutz


Re: Jetzt aber
14.11.2002 18:35:14
Nepumuk
Hallo Luz,
schick mir den Code mal.
Gruß
Nepumuk
Re: Jetzt aber
14.11.2002 18:51:28
Lutz
Jetzt erhalte ich eine neue Fehlermeldung: Laufzeitfehler 13 ´Typen unverträglich` und markiert wird "Next" in Workbook Before_Close !
So hier siehts im Augenblick aus:

Mein Abbrechen-Button in der Userform1:

Private Sub CommandButton1_Click()
Worksheets("Start").Visible = True
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
eos = True
ThisWorkbook.Close

End Sub


Diese Arbeitsmappe:

Option Explicit

Public eos As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks As Worksheet
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
If eos = True Then ThisWorkbook.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close


End Sub

Private Sub Workbook_Open()
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Werte" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next

UserForm1.Show
End Sub



Re: Jetzt aber
14.11.2002 19:07:22
Felix
Hallo Lutz,
habe Dir gestern gegen 20:10 doch einen funktionierenden Code eingestellt. Jedenfalls lief er bei mir. Hast Du ihn ausprobiert??????

Nocheinmal:

Folgendes in Diese Arbeitsmappe

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If UserForm1.CommandButton1 = True Then Cancel = True
End Sub

'Private Sub Workbook_Open()
'Dim wks
'For Each wks In ActiveWorkbook.Sheets
'If wks.Name <> "Werte" Then
'wks.Visible = True
'Else
'wks.Visible = xlVeryHidden
'End If
'Next
'UserForm1.Show
'End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name = "Start" Then
wks.Visible = True
Else
wks.Visible = xlVeryHidden
End If
Next
End Sub


Und dieses jeweils mit Doppelklick der jeweiligen Button

Option Explicit

Private Sub CommandButton1_Click()
If Workbooks.Count = 1 Then Application.Quit
If Workbooks.Count > 1 Then ThisWorkbook.Close
End Sub


Private Sub CommandButton2_Click()
Me.Hide
End Sub


Gruß
Felix

Re: Jetzt aber
14.11.2002 19:10:53
Lutz
Ups, da habe ich wohl gepennt....gleich mal ausprobieren...
Bis gleich...
Re: Jetzt aber
14.11.2002 19:21:58
Lutz
Hi Felix,

ich weiß nicht, warum das Teil bei mir nicht funzt...habe Deine Codes komplett übernommen (aus den Kommentaren bei Workbook_Open habe ich Anweisungen gemacht)...trotzdem fragt der mich beim Click auf cmd-Button nach dem Speichern....

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige