Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Beenden von Excel bei schliessen einer Userform

154 views
Skip to first unread message

Jens Herhold

unread,
Mar 4, 2010, 5:02:01 AM3/4/10
to
Hallo,

eine Userform wird beim starten meiner Mappe aufgerufen und die Mappe wird
minimiert. Auf der Userform gebe ich Zeiten ein und berechne Ergebnisse. Auch
wird die abgelaufene Zeit im Format hh:mm:ss angezeigt. diesen Ticker beende
ich beim verlassen Der Userform.
Nun möchte ich aber beim verlassen der Userform die Arbeitsmappe gleich mit
schließen, was mir aber nicht gelingt. Mit ThisWorkbook.close startet duch
den Ticker die Userform wieder nach einer Sekunde.
Wie kann ich das machen?

Viele Grüße
Jens

Hajo_Zi

unread,
Mar 4, 2010, 6:00:01 AM3/4/10
to
Hallo Jens,

dann beenden den Ticker korekt. Die meisten sehen den Code nicht und können
darum auch nicht schreiben was falsch ist.

Gruß Hajo
MVP für Microsoft Excel
Betriebssystem Vista Ultimate SP2 und Excel Version2007 SP2
http://Hajo-Excel.de/

Jens Herhold

unread,
Mar 4, 2010, 6:09:01 AM3/4/10
to
Hallo,

hier mal der Code der Mappe...

Aufruf der Userform:

Private Sub Workbook_Open()
Application.WindowState = xlMinimized
UserForm1.Show
End Sub

Modul für die Zeitanzeige:

Public ET As Variant
Public d As Variant
Public Term As Boolean

Sub aktuell()
Dim t As Date
If Term = True Then End
Calculate
ET = Now + TimeValue("00:00:01")
t = ET - d
UserForm1.Label18 = Format(t, "hh:mm:ss")
Application.OnTime ET, "aktuell"
End Sub

Code der Userform:

Option Explicit

Private Sub CommandButton1_Click()
Dim a, b, c, e, f, g, h, i
Dim strL40 As String, strL41 As String
Const AZ_Norm As Date = #7:36:00 AM# 'Stunden, Constante Zeit zuweisen
Const AZ_Min As Date = #6:00:00 AM# 'Stunden
Const AZ_Max As Date = #10:00:00 AM# 'Stunden
Const AZ_Pause As Date = #12:45:00 AM# 'Minuten

a = UserForm1.TextBox1.Value 'umwandeln der fortlfd. Zahl in ein Zeitformat
b = Left(a, Len(a) - 2)
If Len(b) = 1 Then b = "0" & b
c = Right(a, 2)
strL40 = CStr(b) & ":" & CStr(c) & ":" & "00" 'Zeit zusammensetzen und in
der Variablen speichern
i = CDate(strL40) 'Variableninhalt in Zeit umwandeln
d = i 'warum weist du hier den Wert von "i" "d" zu und rechnest nicht mit
"i" weiter?

e = UserForm1.TextBox7.Value
f = Left(e, Len(e) - 2)
If Len(f) = 1 Then f = "0" & f
g = Right(e, 2)
strL41 = CStr(f) & ":" & CStr(g) & ":" & "00"
h = CDate(strL41)

UserForm1.Label14 = Format(d, "hh:mm") & " Uhr" 'berechnen und füllen der
Felder
UserForm1.Label15 = Format(d + AZ_Min, "hh:mm") & " Uhr"
UserForm1.Label16 = Format(d + AZ_Norm + AZ_Pause, "hh:mm") & " Uhr"
UserForm1.Label17 = Format(d + AZ_Max + AZ_Pause, "hh:mm") & " Uhr"
UserForm1.Label19 = Format(h - AZ_Norm - AZ_Pause, "hh:mm") & " Uhr"
UserForm1.Label20 = Format(h - AZ_Max - AZ_Pause, "hh:mm") & " Uhr"
aktuell
End Sub

Private Sub CommandButton2_Click() 'abbrechen
Term = True
Unload UserForm1
'ThisWorkbook.close 'das funktioniert nicht, die Userform wird immer
wieder neu gestartet
End Sub


Private Sub TextBox1_Enter() 'hier wird bei verlassen der Box mit Enter die
Zeit in die Zelle gespeichert und die Berechnung angestoßen
Sheets("Arbeitszeit").Range("A1") = CLng(TextBox1.Text)
CommandButton1_Click
End Sub

Private Sub TextBox7_Enter() 'hier wird bei verlassen der Box mit Enter die
Zeit in die Zelle gespeichert und die Berechnung angestoßen
Sheets("Arbeitszeit").Range("A2") = CLng(TextBox7.Text)
CommandButton1_Click
End Sub

Private Sub UserForm_Initialize() 'hier werden bei Start der UserForm die
gelben Felder mit den gespeicherten Zeiten gefüllt
TextBox1.Text = CStr(Sheets("Arbeitszeit").Range("A1").Value)
TextBox7.Text = CStr(Sheets("Arbeitszeit").Range("A2").Value)
Term = False
End Sub

"Hajo_Zi" schrieb:

Hajo_Zi

unread,
Mar 4, 2010, 6:32:01 AM3/4/10
to
Halllo Jens,

wenn Du mal in die Datei schaust Dir Dir als Grundlage gedient hat, wirs Du
feststellen das es unter DieserArbeitsmappe auch ein Ereignis
Private Sub Workbook_BeforeClose(Cancel As Boolean)
gib. Derf den Timer abdschaltet in der Form
On Error Resume Next ' Fehlerroutine von
Excel ausschalten
Application.OnTime EarliestTime:=DaEt, Procedure:="aktuell",
Schedule:=False
On Error GoTo 0 ' Fehlerroutine von
Excel einschalten

Bernhard Sander

unread,
Mar 4, 2010, 6:51:37 AM3/4/10
to
Hallo Jens,

> Sub aktuell()
> Dim t As Date
> If Term = True Then End

Damit schaltest Du nicht den Timer ab sondern lässt die Timer-Prozedur ins Leere
laufen. Der Timer wird nur nicht wieder frisch gestartet.
Zu dem Zeitpunkt bei dem auf den "Abbrechen"-Knopf geklickt wird, hat Excel noch
eine Timer-Anforderung registriert und führt sie auch wie geplant aus.
Erst mit dieser Ausführung wird keine weitere Timer-Aktion mehr registriert.

Lösung: (siehe auch die Hilfe zu OnTime)

> Private Sub CommandButton2_Click() 'abbrechen
> Term = True

' die obige Zeile kann weg, statt dessen schalte den Timer ab:
Application.OnTime ET, "aktuell", Schedule:=false

> Unload UserForm1
> 'ThisWorkbook.close 'das funktioniert nicht, die Userform wird immer
> wieder neu gestartet
> End Sub

Gruß
Bernhard Sander

Jens Herhold

unread,
Mar 4, 2010, 6:58:02 AM3/4/10
to
Hallo Hajo,

Deinen Vorschlag habe ich mal getestet, leider geht es auch nicht, die
Userform wird wieder geladen. hier mal die hochgeladene Mappe zur Ansicht.
Wie gesagt, beim schließen der Userform soll auch die Mappe beendet werden.
Link:
http://ul.to/thcwoo

"Hajo_Zi" schrieb:

Jens Herhold

unread,
Mar 4, 2010, 1:11:01 PM3/4/10
to

"Bernhard Sander" schrieb:

> .
>
Vielen Dank an Euch, das wäre erledigt, wie kann ich aber jetzt noch
speziell diese Mappe schließen? Mit Application.Quitt schließe ich auch noch
andere geöffnete Mappen und mit ThisWorkbook.Close bleibt Excel noch an.

Grüße Jens

Bernhard Sander

unread,
Mar 4, 2010, 1:38:44 PM3/4/10
to
Hallo Jens,

> Vielen Dank an Euch, das wäre erledigt, wie kann ich aber jetzt noch
> speziell diese Mappe schließen? Mit Application.Quitt schließe ich auch noch
> andere geöffnete Mappen und mit ThisWorkbook.Close bleibt Excel noch an.

In wiefern macht ThisWorkbook.Close nicht das, was Du gerne hättest?
Wenn andere Mappen offen bleiben sollen, *muss* Excel doch weiterlaufen!?!

Gruß
Bernhard Sander

Jens Herhold

unread,
Mar 5, 2010, 1:34:05 AM3/5/10
to
Hallo Bernhard,

wenn einzig der Arbeitszeitrechner geöffnet ist, schließt ThisWorkbook.close
nur diese Mappe und lässt Excel geöffnet, Application.Quitt schließt wieder
alle geöffneten Mappen. Gibt es eine Möglichkeit explizit diese Mappe zu
schließen und wenn sie allein geöffnet ist, dann auch Excel zu beenden?

Grüße Jens

"Bernhard Sander" schrieb:

> .
>

Andreas Killer

unread,
Mar 5, 2010, 3:17:37 AM3/5/10
to
On 5 Mrz., 07:34, Jens Herhold <JensHerh...@discussions.microsoft.com>
wrote:

> wenn einzig der Arbeitszeitrechner geöffnet ist, schließt ThisWorkbook.close
> nur diese Mappe und lässt Excel geöffnet, Application.Quitt schließt wieder
> alle geöffneten Mappen. Gibt es eine Möglichkeit explizit diese Mappe zu
> schließen und wenn sie allein geöffnet ist, dann auch Excel zu beenden?

Im Prinzip musst Du nur kucken ob noch weitere Mappen offen sind, wenn
ja dann nur diese zu, sonst Excel zu.

Unglücklicher weise zählt die PERSONL.XLS auch als Mappe, welche aber
ausgeblendet ist, das gilt es zu berücksichtigen.

Andreas.

Sub Test()
Dim OtherOpen As Boolean, WB As Workbook
For Each WB In Workbooks
If WB.Name <> ThisWorkbook.Name And WB.Windows(1).Visible Then
OtherOpen = True
Exit For
End If
Next

If OtherOpen Then
ThisWorkbook.Close
Else
Application.Quit
End If
End Sub

Jens Herhold

unread,
Mar 5, 2010, 6:16:01 AM3/5/10
to
Danke an alle, jetzt funktioniert es wie gewollt.

"Andreas Killer" schrieb:

> .
>

0 new messages