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

OnTime beenden!

OnTime beenden!
06.05.2008 10:03:07
Andreas
Hallo zusammen!
Nun hab ich mich bereits durch das Forum gegraben konnte aber keine Lösung finden.
Hier mein Problem:
Beim Öffnen einer UserForm wird ein OnTime gestartet, welches bei Inaktivität (kein Button wird gedrückt) die UserForm nach 15 Sekunden wieder schließt, also eine Prozedur aufruft, die die UserForm ausblendet.
Hier der Code:

Private Sub UserForm_activate()
Dim zeit As Date
zeit = Now + TimeValue("00:00:15")
Application.OnTime zeit, "Schließen1"
End Sub



Private Sub CommandButton1_Click()
Sheets("Fragen").Select
Application.Run "Timestamp"
Range("B2").Select
varCol = 2
If varCol = "" Then Exit Sub
Set rng = Cells(Rows.Count, CInt(varCol)).End(xlUp)
rng.Offset(1).Select
ActiveCell.Value = "X"
ActiveCell.Next.Select
ActiveCell.Value = "-"
ActiveCell.Next.Value = "-"
ActiveCell.Offset(1, 0).Select
Unload UserForm2
UserForm3.Show
End Sub



Private Sub CommandButton2_Click()
Sheets("Fragen").Select
Application.Run "Timestamp"
Range("B2").Select
varCol = 2
If varCol = "" Then Exit Sub
Set rng = Cells(Rows.Count, CInt(varCol)).End(xlUp)
rng.Offset(1).Select
ActiveCell.Value = "-"
ActiveCell.Next.Select
ActiveCell.Value = "X"
ActiveCell.Next.Value = "-"
ActiveCell.Offset(1, 0).Select
Unload UserForm2
UserForm3.Show
End Sub



Private Sub CommandButton3_Click()
Sheets("Fragen").Select
Application.Run "Timestamp"
Range("B2").Select
varCol = 2
If varCol = "" Then Exit Sub
Set rng = Cells(Rows.Count, CInt(varCol)).End(xlUp)
rng.Offset(1).Select
ActiveCell.Value = "-"
ActiveCell.Next.Select
ActiveCell.Value = "-"
ActiveCell.Next.Value = "X"
ActiveCell.Offset(1, 0).Select
Unload UserForm2
UserForm3.Show
End Sub


"Schließen1" schaut so aus:
Sub Schließen1()
Unload UserForm1
Unload UserForm2
UserForm1.Show
End Sub


Nun will ich erreichen, daß der Klick auf den CommandButton OnTime beendet, weil sonst die Zeit weiterläuft und es dann zu vorzeitigem Schließen der folgenden Userformen kommt.
So hab ich es mal versucht:


Private Sub CommandButton1_Click()
Application.OnTime zeit, "Schließen1", Schedule:=False
Sheets("Fragen").Select
Application.Run "Timestamp"
Range("B2").Select
varCol = 2
If varCol = "" Then Exit Sub
Set rng = Cells(Rows.Count, CInt(varCol)).End(xlUp)
rng.Offset(1).Select
ActiveCell.Value = "X"
ActiveCell.Next.Select
ActiveCell.Value = "-"
ActiveCell.Next.Value = "-"
ActiveCell.Offset(1, 0).Select
Unload UserForm2
UserForm3.Show
End Sub


Leider hab ich damit nur folgende Fehlermeldung produziert:
"Laufzeitfehler '1004':
Die Methode 'OnTime' für das Objekt '_Application' ist fehlgeschlagen'
Wie komm ich da weiter?
Danke!
lg Andreas

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

Betreff
Datum
Anwender
Anzeige
AW: OnTime beenden!
06.05.2008 10:13:03
Hajo_Zi
Hallo Andreas,
Du hast die Zeit schon investiert um die Datei zu erstellen, das hat schon Geld gekostet, warum müssen wir dann die Datei nochmal erstellen? Ein hochladen einer Datei ist doch in diesem Forum sehr einfach.

AW: OnTime beenden!
06.05.2008 11:20:00
Andreas
Hallo Hajo!
Na ich wollte ja nicht gleich mit der Tür ins Haus fallen - tue nun aber gerne, wie mir geheißen:

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


Ich habe jetzt mal gleich den Tip von Rudi beherzigt und die OnTime-Start und -Ende ins Modul 2 verlagert - hilft aber leider auch nichts.
Danke einstweilen!
lg Andreas

Anzeige
AW: OnTime beenden!
06.05.2008 11:32:00
Hajo_Zi
Hallo Andreas,
ich habe nicht gesehe wie Du Rudi sein Tip eingearbeitet hast. Ich habe es jetzt gemacht. Der Code ist zu umfangreich um da was zu testen. Es gibt iun VBA auch den Befehl Debuggen, Kompilieren des VBA Projektes der Hilfreich ist. Ich habe es jetzt mal gemacht une einige Fehler beseitigt.
https://www.herber.de/bbs/user/52141.xls
Excel ist ein vielseitiges Programm und man kann viele Probleme damit lösen. Jede positive Seite hat aber auch negative Aspekte - einer davon ist im Makrorecorder enthalten.
Die Bücher, die es zu Excel VBA gibt, erklären viele Funktionen, aber ich habe bisher nur in einem gelesen, dass der vom Makrorecorder aufgezeichnete Code bereinigt werden muss.
Der Makrorecorder zeichnet alle Aktionen auf, u. a. auch das Auswählen einer Zelle oder eines eingebetteten Objektes (Bild, Diagramm, Zeichnungsobjekt usw.) – dabei wird generell Select und Activate aufgezeichnet. Diese Befehle sind in VBA zu 99,9% nicht notwendig. Sie lassen den Bildschirm flackern und senken die Geschwindigkeit bei der Ausführung des Codes. Man sollte also schon von Beginn an bei der Programmierung darauf achten, solche Befehle zu vermeiden. Meine Erfahrung mit dem Vorsatz: „Das mache ich später“ ist, man schreibt das Programm später meist komplett neu. Also kostest es nicht nur Rechnerzeit sondern auch Deine Zeit und ist Dir Deine Zeit so wenig Wert?
Zum Vergleich mit und ohne Select schau Dir auch mal diese Beispielarbeitsmappe an: mit und ohne select
Auf meiner Homepage sind alle meine Beispiele ohne Select. Da kann man sich also einige Lösungsansätze zu diesem Thema ansehen.

Anzeige
AW: OnTime beenden!
06.05.2008 13:32:00
Andreas
Hallo Hajo!
Vorerst mal vielen Dank für Deine Hilfe, aber der "Laufzeitfehler 1004" kommt leider immer noch :-(
Dein Beispiel mit dem Select/nicht Select ist beeindruckend!
lg Andreas

AW: OnTime beenden!
06.05.2008 13:40:54
Hajo_Zi
Hallo Andreas,
Du hast bestimmt auch schon festgestellt das Dein Beispiel rechzt umfangreich ist. Ich habe nicht die Zeit den gesamten Code durchzuarbeiten. Falls ich helfen soll, mußt Du schon aufschreiben was ich machen soll um den Fehler zu simulieren.
Gruß Hajo

AW: OnTime beenden!
06.05.2008 14:15:54
Andreas
Und ob ich das gemerkt habe, deswegen wollte ich es ursprünglich auch nicht hoch laden :-)
Ich will erreichen, dass eine UserForm nach 15 Sekunden geschlossen wird, wenn in dieser Zeit kein CommandButton gedrückt wird - wenn allerdings ein Button gedrückt wird, soll OnTime beendet werden, weil sonst der Timer weiterläuft.
Dies wollte ich ich folgendermaßen erreichen:
Start:

Sub langsam1()
zeit = Now + TimeValue("00:00:15")
Application.OnTime zeit, "Schließen1"
End Sub


Beenden


Sub langsam1ex()
Application.OnTime zeit, "langsam1", Schedule:=False
End Sub


Und genau beim zweiten Teil (langsam1ex) bekomme ich dann diesen "Laufzeitfehler '1004':
Die Methode 'OnTime' für das Objekt '_Application' ist fehlgeschlagen"
Der Rest funktioniert ja.
lg Andreas

Anzeige
AW: OnTime beenden!
06.05.2008 14:31:00
Hajo_Zi
Hallo Andreas,
mir scheint Du möchtest den Fehler selber finden, dann wünsche ich Dir viel Erfolg. Ansonsten hättest Du meinen Beitrag komplett gelesen. Ich bin raus.
Gruß Hajo

AW: OnTime beenden!
06.05.2008 14:51:47
Andreas
Keine Ahnung was ich verpasst oder überlesen habe - ich sag auf jeden Fall Danke und werde mir dann wohl selbst helfen müssen.
lg Andreas

AW: OnTime beenden!
06.05.2008 10:14:11
Rudi
Hallo,
deklariere zeit außerhalb einer Prozedur, dann steht die Var. im gesamten Modul zur Verfügung.
Gruß
Rudi

AW: OnTime beenden!
06.05.2008 17:34:28
Andreas
Das war der erste Schritt zum letztendlich erreichten Erfolg.
Vielen Dank an Euch alle!
lg Andreas
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige