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

Bei Inaktivität: Signalton, UserForm u. Schliessen

Bei Inaktivität: Signalton, UserForm u. Schliessen
20.05.2004 23:45:09
BennyBunny
Hallo Forum,
ich möchte ein Makro basteln, welches nach 10 Sekunden Inaktivität (also keine Änderungen mehr in der Excel-Tabelle) eine UserForm erzeugt, die die Warnmeldung ("Die Datei wird in 5 Sekunden automatisch geschlossen") erhält und einen Button ("Jetzt nicht schliessen") zum Abbrechen und wieder Rücksetzen des 10s-Timers beinhaltet.
Sowas gibt es schon von Hajo (Danke):
In die Arbeitsmappe kommt:
Option Explicit
' erstellt von Hajo.Ziplies@web.de 28.12.03
' http://home.media-n.de/ziplies/

Private Sub Workbook_Open()
Zeitmakro
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=ET, Procedure:="Start", Schedule:=False
Application.OnTime EarliestTime:=ET1, Procedure:="Schließen", Schedule:=False
End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.OnTime EarliestTime:=ET, Procedure:="Start", Schedule:=False
Zeitmakro
End Sub


In den Button der UserForm kommt:
Option Explicit
' erstellt von Hajo.Ziplies@web.de 28.12.03
' http://home.media-n.de/ziplies/

Private Sub UserForm_Initialize()
BoZu = False
End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'   Damit mit X nicht geschloßen werden kann
If CloseMode = 0 Then
MsgBox "Bitte schließen Sie die Anwendung mit der -Ende- Schaltfläche.", vbCritical
Cancel = 1
End If
End Sub


Private Sub CMD_Nein_Click()
Application.OnTime EarliestTime:=ET1, Procedure:="Schließen", Schedule:=False
Zeitmakro
BoZu = True
Me.Hide
End Sub


Und in ein Modul kommt:
Option Explicit
' erstellt von Hajo.Ziplies@web.de 28.12.03
' http://home.media-n.de/ziplies/
Public ET As Variant
Public ET1 As Variant
Public BoZu As Boolean

Sub Zeitmakro()
BoZu = False
On Error Resume Next
Alarm
Application.OnTime EarliestTime:=ET1, Procedure:="Zeitmakro", Schedule:=False
ET = Now + TimeValue("00:00:15")
Application.OnTime ET, "Start"

End Sub
Sub Start()
ET1 = Now + TimeValue("00:00:10")
Application.OnTime ET1, "Schließen"
UserForm1.Show
End Sub
Sub Schließen()
Unload UserForm1
If BoZu = False Then ThisWorkbook.Close True
End Sub
Soweit so gut. Leider ist da aber auch noch irgendein Fehler drin: Hat man die UserForm bei ersten Mal weggeklickt, dann wird die Mappe beim nächsten TimeOut nicht mehr automatisch geschlossen. Den Fehler habe ich noch nicht gefunden.

Jetzt möchte ich aber gerne noch ein akustisches Signal, sobald diese UserForm erscheint.
Nach 10 Sekunden Inaktivität soll also 5 Sekunden lang ein Ton erzeugt werden, am liebsten einen Intervall-Ton, eben für die Dauer der UserForm.
Den Ton habe ich mir auch schon zusammengesucht:
In ein Modul kommt:
Declare Function Ton& Lib "kernel32" _
Alias "Beep" _
(ByVal dwFrequenz As Long, _
ByVal dwDauer As Long)

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Alarm()
Dim i As Integer
For i = 1 To 2
Ton 440, 100
Sleep 50 '50 Millisekunden Pause
Next i
End Sub

Der Intervall-Ton klappt auch.
Nur wie bekomme ich jetzt den (Dauer-)Ton und die UserForm-Abfrage nebeneinander zum laufen ? Rufe ich zuerst den Ton auf, ist alles für die Dauer des Tons blockiert. Rufe ich zuerst die UserForm auf, muss ich erst den Button drücken, bevor der Ton kommt ...
Ich würde mich sehr freuen, wenn mir ein Excel-Freak ein paar Tipps geben könnte.
Vielen Dank und schöne Grüße,
BennyBunny
PS: Hier die Datei: https://www.herber.de/bbs/user/6575.xls

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
21.05.2004 01:22:52
Björn B.
Hallo BennyBunny,
zunächst mal ein kleiner Auszug aus den FAQ:
"NickNames sind nicht erwünscht. Diese Frager werden bei der Beantwortung nicht gerade bevorzugt behandelt. Nenne Deinen Vornamen, damit man Dich ansprechen kann."
Nun zu Deinem Problem. Probier's mal hiermit:

Die Datei https://www.herber.de/bbs/user/6576.xls wurde aus Datenschutzgründen gelöscht

Gruß
Björn
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
21.05.2004 10:16:08
Benjamin
Hallo Björn !
Sorry, das mit dem Nickname habe ich nicht gewusst. Macht der Gewohnheit. Ist aber nicht schwer abzuleiten. Ich heisse Benjamin (-:
Zum Thema: Großes Lob !!! Genau so habe ich es mir vorgestellt ! Besten Dank !
Mir ist jetzt aber noch ein anderes Problem aufgefallen: Wenn man während der 10-Sekunden Timerphase das Excelfenster inaktiv macht, also mit irgendeinem anderen Programm weiterarbeitet, dann piepst es leider nicht mehr. (Immerhin blinkt es noch in der Taskleiste). Aber viel schlimmer: es schliesst sich nicht mehr automatisch. Erst wenn man zu excel zurückwechselt.
Ich vermute, dass die Makroabarbeitung bei inaktivem Excel einfach stehenbleibt. Da kann man wohl nichts machen, oder ?
Und wie bekommt man es hin, dass sich die Mappe beim automatischen Schliessen nicht speichert ?

Sub Schließen()
Unload UserForm1
If BoZu = False Then ThisWorkbook.Close True
End Sub

Irgendwie so ?:
ThisWorkbook.SaveChanges False ...
Vielen Dank und schöne Grüße,
Euer Ben
Anzeige
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
21.05.2004 22:41:32
Björn B.
Hallo Benjamin,
zunächst mal die Antwort auf Deine zweite Frage:

Sub Schließen()
Unload UserForm1
If BoZu = False Then ThisWorkbook.Close False
End Sub

Bezüglich des Programmwechsels fürchte ich, dass man dafür etwas mehr als die Excel-Bordmittel braucht. Ich versuch' mal was zu finden, habe aber ehrlich gesagt nicht allzu große Hoffnung.
Gruß
Björn
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
23.05.2004 10:03:07
Benjamin
Hallo Björn,
danke für den Tipp, um das Speichern zu verhindern. Funktioniert zwar bestens, verstehe ich aber nicht ganz. Ich dachte, das "true" bedeutet nur, dass überhaupt erst geschlossen werden soll. Warum hat das was mit "speichern" zu tun ?
Habe noch eine ähnliche Datei von Hajo gefunden:
https://www.herber.de/bbs/user/6643.xls
Hier wird die Datei nach Inaktivität auch geschlossen. Und das funktioniert sogar, selbst wenn Excel inaktiv im Hintergrund arbeitet. Hat das dann was mit der UserForm zu tun, dass sich die Mappe in meinem Fall nicht selbstständig schliesst ?
Vielleicht könnte man auf die UserForm ganz verzichten:
Bei einer gewissen Zeit Inaktivität soll das Piepsen beginnen. Dann einer gewissen Zeit Piepsen ( und Inaktivität) soll die Mappe einfach geschlossen werden (ohne zu speichern).
Das wäre fast noch besser. Auf jeden Fall sollte das alles halt auch im Hintergrund (Excel inaktiv) ablaufen (so wie bei Hajo´s Excel-Beispiel).
Für Tipps würde ich mich ehrlich sehr freuen !!!!
Gruß,
Euer Ben
Anzeige
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
23.05.2004 16:04:03
andre
Hallo Ben,
das man nicht gleich weiß, was es mit dem True ... auf sich hat, liegt auch an der Programmierweise. Ein Fortgeschrittener mag vielleicht wissen, was sich dahinter verbirgt. Im Normalfall schrteibt man aber dazu, um was es geht, z.B. SaveChanges=True ...
Wenn es was mit dem Userform zu tun hat lässt sich vielleicht umgehen, wenn Du ShowModal auf False setzt (ungetestet).
AW: Bei Inaktivität: Signalton, UserForm u. Schliessen
23.05.2004 16:10:47
Björn B.
Hallo Benjamin,
ThisWorkbook.Close False ist die Kurzform von ThisWorkbook.Close SaveChanges:=False
das True oder False gibt daher an, ob Änderungen gespeichert werden sollen oder nicht. Wird weder True noch False angegeben, so kommt eine Abfrage ob Du speichern willst.
Mit der Userform hat es nichts zu tun, dass Deine Arbeitsmappe sich nicht schließt, sondern damit, dass man fortgeschrittene Kenntnisse zum Nutzen der API's braucht, um das übliche Verhalten von Excel sozusagen auszutricksen.
Gruß
Björn
Anzeige
Lösung mit UserForm
23.05.2004 16:33:22
Björn B.
Hallo Benjamin,
ich hatte mich auch schon in dem anderen Thread auf die Lauer gelegt, ob die echten Spezialisten dafür 'ne Lösung haben und wie man sieht ist auf Nepomuk verlass.
Ich habe die Lösung von Nepumuk mal in die bisherige Lösung eingebaut. Du findest die Datei hier: https://www.herber.de/bbs/user/6664.xls
Über eine Lösung ohne Userform muss ich erst noch mal nachdenken.
Gruß
Björn
AW: Lösung mit UserForm
23.05.2004 17:13:57
Benjamin
Hallo Björn,
mann, ist ja echt unglaublich, wie fit Ihr alle seit ! Ist echt toll !
Danke Björn, dass Du Nepumuk´s Tipps mit eingebaut hast ! Ich habe es jetzt noch mit dem Schliessen des ganzen Excels erweitert, und den zweiten Button (Datei schliessen) in die Userform dazugenommen.

Die Datei https://www.herber.de/bbs/user/6667.xls wurde aus Datenschutzgründen gelöscht

Im "anderen" Thread gab´s dann noch was mit dem Schliessen_Kreuz in der Userform entfernen. Habe versucht, es einzubauen, funktioniert aber leider nicht.

Der Code stammt von:
https://www.herber.de/forum/archiv/420to424/t422701.htm
Mir wäre es aber auch fast lieber, wenn das Kreuz bleibt, und bei einem Klick drauf der Timer einfach wieder gestartet wird. Das wäre wohl am sinnvollsten.
Ich glaube, dann wäre ich langsam glücklich (-:
Viele Grüße,
Ben
PS: Was mir noch aufgefallen ist: das ganze reagiert etwas träge mit Verzögerung. Das liegt aber wohl an dem gleichzeitigen Gepiepse.
Anzeige
Lösung ohne UserForm
23.05.2004 17:30:18
Björn B.
Hallo Benjamin,
etwas nachgedacht und dann kam die Erleuchtung.
Was hälst Du von dieser Datei?
https://www.herber.de/bbs/user/6668.xls
Alle Wünsche erfüllt oder ist noch was offen?
Gruß
Björn
AW: Lösung ohne UserForm
23.05.2004 17:35:45
rolf
hi björn
das ich mir nicht sicher bin das du meinen dank gelesen hast:
nochmals danke
rolf
AW: Lösung mit UserForm
23.05.2004 17:47:49
Björn B.
Hallo Benjamin,
der Fehler in Deinem Code war, dass Du die Deklarationen und das Makro in den Code des UserForm hättest einbinden müssen und nicht in das Modul.
Sieh mal hier nach:
https://www.herber.de/bbs/user/6669.xls
und such' Dir dann aus welche Lösung Dir am besten gefällt.
Gruß
Björn
Anzeige
AW: Lösung mit UserForm
23.05.2004 22:57:58
Benjamin
Guten Abend, Björn !
Also ehrlich, Du bist echt klasse ! Ihr habt´s halt drauf. Bin restlos glücklich. Ich denke, die Variante mit der UserForm ist doch die bessere. Da weiss man auch, warum es plötzlich piepst. Etwas schade ist halt das verzögerte Verhalten, aber die Funktion ist einwandfrei.
Nochmal vielen Dank !!!!
Schöne Grüße,
Ben
Danke für die Rückmeldung - mit Text
23.05.2004 23:15:12
Björn B.
Hallo Benjamin,
die Verzögerung (Eieruhr) bei Zellenwechsel rührt vom Alarm her, der in der Prozedur
Sub Zeitmakro() aufgerufen wird. Wenn Du auf den Ton beim Zellenwechsel verzichten kannst, dann einfach die Zeile Alarm im Sub Zeitmakro() löschen und schon gibt's keine Verzögerung mehr. Der Alarm kommt trotzdem wenn das UserForm sichtbar wird.
Gruß
Björn
Anzeige
AW: Danke für die Rückmeldung - mit Text
24.05.2004 00:01:19
Benjamin
Hallo Björn,
sorry, muss doch nochmal stören.
Das "Alarm" im

Sub habe ich rausgenommen. Gefühlsmässig hat sich aber nichts geändert (mit träge meine ich die Reaktion auf den "nein"-Button der UF, oder das automatische schliessen nach Timeout). Ist aber ok. Damit kann man leben.
Das mit dem "Änderungen nicht speichern" und das Excel komplett beenden (falls keine andere Mappe mehr offen ist) bekomme ich einfach nicht hin:

Sub Schließen()
Unload UserForm1
If BoZu = False Then
ThisWorkbook.Close SaveChanges:=False
'ThisWorkbook SaveChanges:=False 'ThisWorkbook.Save 'False 'vor schliessen wird gespeichert
MsgBox (Workbooks.Count)
If Workbooks.Count = 1 Then
MsgBox ("app quit")
Application.Quit 'Else ThisWorkbook.Close 'SaveChanges:=False 'ThisWorkbook.Close
End If
End If
'If Workbooks.Count = 0 Then Application.Quit
'End If
End Sub

Das Problem ist: wenn die Mappe geschlossen wird, dann ist auch das Makro weg und wird nicht weiter abgearbeitet. Somit geht auch das Application.quit nicht mehr. Ich bräuchte quasi das Gegenteil von "ThisWorkbook.Save". Aber das gibt´s wohl nicht. Ich blick´s nicht. Ich hoffe, es liegt an der Uhrzeit ...*gääähn*
Bleibt das Excel halt offen, ist nicht weiter schlimm.
Nochmal besten Dank.
Gute Nacht,
Gruß,
Ben
Anzeige
AW: Danke für die Rückmeldung - mit Text
24.05.2004 00:35:27
Björn B.
Hallo Benjamin,
versuch's mal hiermit.
https://www.herber.de/bbs/user/6673.xls
Nun ist aber Schluß für heute.
Gute Nacht
Björn

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige