Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

OnTime beenden!

Betrifft: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 10:03:07

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

  

Betrifft: AW: OnTime beenden! von: Hajo_Zi
Geschrieben am: 06.05.2008 10:13:03

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.

GrußformelHomepage


  

Betrifft: AW: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 11:20:58

Hallo Hajo!

Na ich wollte ja nicht gleich mit der Tür ins Haus fallen - tue nun aber gerne, wie mir geheißen:

https://www.herber.de/bbs/user/52140.xls

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


  

Betrifft: AW: OnTime beenden! von: Hajo_Zi
Geschrieben am: 06.05.2008 11:32:44

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.

GrußformelHomepage


  

Betrifft: AW: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 13:32:26

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


  

Betrifft: AW: OnTime beenden! von: Hajo_Zi
Geschrieben am: 06.05.2008 13:40:54

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


  

Betrifft: AW: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 14:15:54

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


  

Betrifft: AW: OnTime beenden! von: Hajo_Zi
Geschrieben am: 06.05.2008 14:31:41

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


  

Betrifft: AW: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 14:51:47

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


  

Betrifft: AW: OnTime beenden! von: Rudi Maintaire
Geschrieben am: 06.05.2008 10:14:11

Hallo,
deklariere zeit außerhalb einer Prozedur, dann steht die Var. im gesamten Modul zur Verfügung.

Gruß
Rudi


  

Betrifft: AW: OnTime beenden! von: Andreas Krutzler
Geschrieben am: 06.05.2008 17:34:28

Das war der erste Schritt zum letztendlich erreichten Erfolg.

Vielen Dank an Euch alle!

lg Andreas