Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
688to692
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
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

noch ein Problem: VBA Timer Monatstipp 09.05

noch ein Problem: VBA Timer Monatstipp 09.05
27.10.2005 20:13:43
michael
Hallo,
kann ich den VBATimer auch in einem Tabellenblatt darstellen?
Ich hab die Schaltflächen und den Timer in einem TabellenBlatt erstellt. Ich hab die Eigenschaften und die Codes analog denen der UserForm übernommen.
Beim Schrittweise laufenlassen spingt der Code der Userform zur UserForm im Tabellenblatt, erwartet das Betätigen des Start Buttons und springt dann in die Privat

Sub Timer1_Timer.
Das alles passiert beim Code in einem Tabellenblatt nicht. Keine Betätigen des Start Buttons im Tabellenblatt , kein Wechseln in die Privat 

Sub Timer1_Timer. Einfach nur bis zum End 

Sub und kein Weiter.
Wie kann ich diesen Timer ohne UserForm zum Laufen bringen?
Danke und viele Grüße
Michael

		

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

Betreff
Datum
Anwender
Anzeige
AW: noch ein Problem: VBA Timer Monatstipp 09.05
27.10.2005 20:38:44
Matthias
Hallo Michael,
Wie kann ich diesen Timer ohne UserForm zum Laufen bringen?
M.W. gar nicht, aber die Userform muss nicht angezeigt sein, nur geladen.
Also Userform1.Show
Und in der UserForm_Activate()-Prozedur:
Me.Hide
Dann läuft der Timer, das UF ist aber ausgeblendet.
Gruß Matthias
und die Buttons?
27.10.2005 20:49:12
michael
Hallo Mathias,
was passiert mit den CommandButtons? Lässt sich das trennen? Timer in der ausgeblendeten UserForm und Start/Stop Abbruch Buttons im Tabellen Blatt?
Danke und Gruß
Michael
AW: und die Buttons?
27.10.2005 20:57:43
Matthias
Hallo Michael,
hier das einfachste Beispiel:
1. ein Userform, nur ein Timer, sonst keine Elemente
Code:

Option Explicit
Private Sub Timer1_Timer()
Timer_Proc
End Sub
Private Sub UserForm_Activate()
With Timer1
.Interval = 1000
.Enabled = True
End With
Me.Hide
End Sub
Private Sub UserForm_Initialize() 'damit es kaum flackert
With Me
.Width = 0
.Height = 0
End With
End Sub

2. ein Standardmodul:

Sub Timer_Proc()
Range("A1") = Range("A1") + 1
End Sub

3. ein Tabellenblatt:
der Code:

'START
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
'STOP
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub

Gruß Matthias
Anzeige
bleibt bei UserForm1.Show hängen
27.10.2005 23:21:41
michael
Hallo Matthias,
hab alles wie beschrieben übertragen. Wenn ich nun starte erhalte ich in der Tabelle1 die UserForm. Die verschwindet nicht automatisch und ich kann sie auch nicht entfernen so dass der Makro weiterläuft.
reicht bei 'STOP

Private Sub CommandButton2_Click()
Unload UserForm1
End Sub

oder sollte da noch ein Timer1.Enabled = FAlse stehen
'STOP

Private Sub CommandButton2_Click()
Timer1.Enabled = FAlse
Unload UserForm1
End Sub

Ich bin mir nicht sicher, zumindest gibt es im Timerbeispiel ein Timer1.Enabled = FAlse.
ich meine auch irgendwo gelesen zu haben dass man timer ausschalten müsste - warum auch immer...
Danke und Gruß
Michael
Anzeige
Danke!! hab Fehler ausfindig machen können...
28.10.2005 13:10:05
michael
Hallo Matthias,
Super - Vielen Dank. Ich bin begeistert und neidisch um dein Wissen über VBA...
Der Fehler war, dass meine UserForm einen Namen (frmTimer) hat. Da hatte ich aus UserForm_Initilize (od _Activate) ein frmTimer_Initilize gemacht...
Ich vertsehe nur noch nicht, dass die Prozedur nach UserForm1.Show automatisch in das Private Sub UserForm-Initialize() und selbständig die nachfolgenden Private Sub, ohne dass diese aufgerufen werden müssten (Call...), springt.
Erst die Timer_Proc muss, das ist klar, aufgerufen werden. Interessant, dass das auch ohne Call geht.
Noch mal kurz zum STOP. Ein Timer1.Enable = False braucht es nicht, wenn man die Start-/stop-buttons in einer Tabelle hat?
Wüsste auch nicht wie sich das realisieren ließe - wobei das nichts bedeutet...
Innerhalb der Private Sub Stop_Click (Tabellenblatt) wird Timer nur als nicht deklarierte Variable erkannt.
In der UserForm wird nach STOP nur noch die Priv.Sub UserForm_Initialize() durchlaufen, jedoch nicht die _Activate(), in der man über eine If-Abfrage das Enable.True in ein False und umgekehrt wechseln könnte. Vieleciht könnte man eine solche Private Sub explizit aufrufen?
Vielleicht hast du eine Erklärung.
Vielen Dank und Viele Grüße
Michael
Anzeige
AW: Danke!! hab Fehler ausfindig machen können...
28.10.2005 13:33:26
Matthias
Hallo Michael,
Ich vertsehe nur noch nicht, dass die Prozedur nach UserForm1.Show automatisch in das Private Sub UserForm-Initialize() und selbständig die nachfolgenden Private Sub, ohne dass diese aufgerufen werden müssten (Call...), springt.
Wenn ein Userform mit .Show aufgerufen wird und das UF muss erst geladen werden, wird zuerst das Userform_Initialize()-Ereignis ausgelöst.
Anschließend dann das Userform_Activate()-Ereignis.
Ist sie bereits geladen (d.h. wurde sie mit Hide nur ausgeblendet und nicht mit Unload entladen), wird bei der Show-Methode nur das Activate-Ereignis ausgelöst.
Man kann den Timer aber auch aus einem Tabellenblatt- oder Stadardmodul ansprechen, wenn man den Namen der Userform vorne anstellt:

Userform1.Timer1.Enabled = False
Userform1.Timer1.Interval = 100

Man könnte also den Timer auch anhalten, ohne das Userform mit Unload zu entladen.
Übrigens wird mit dem Unload-Befehl das Userform, falls es nicht geladen ist, erst geladen und dann gleich wieder entladen.
Aber das nur nebenbei.
Grüße aus und viel Spaß noch,
Matthias
Anzeige
... sorry, noch ne Frage - Errorhandler
28.10.2005 15:39:15
michael
...erst mal vielen Dank für die hilfreiche Antwort!
ich bin gerade dabei eine größere Prozedur, die ursprünglich für einen API-Timer gestrickt wurde, an den VBA-Timer anzupassen.
Bei der API-Prozedur gab es einen Errorhandler - On ERROR GoTo err_exit - mit dem wurde die Stop-Prozedur aufgerufen und eine MsgBox mit Err.Number erzeugt. Ist sowas beim VBA Timer genausos wichtig, bzw. möglich. Kritisch dürfte da nur der Teil der Prozedur sein, bei der der Teimer läuft, oder?
Danke und viele Grüße
Michael
AW: ... sorry, noch ne Frage - Errorhandler
28.10.2005 16:26:45
Matthias
Hallo Michael,
der Timer läuft a immer, wenn das UF geladen ist. Wie du den Timer stoppst, weißt du ja jetzt.
Interessant wäre, zu wissen was passiert, wenn der Timer "überläuft", d.h. der Code ist noch nicht fertig und wäre eigentlich schon wieder dran. Wartet der Timer dann?
Mich wüde auch interessieren, ob man die Frage nach der ActiveX-Komponente zu Beginn übergehen kann.
(So, Spieß umgedreht, jetzt frage ich mal ;-)
Gruß Matthias
Anzeige
hmm...
29.10.2005 13:59:01
michael
Hallo Matthias,
soweit ich es testen konnte wartet der timer. Ich habe eine Msgbox in die Prozedur eingebaut, die wartet bis ich ok drücke, dabei wartet der Timer (zwangsläufig).
Bei einbau eines sleep 1000 bei einem Timer1.Interval=500 (künstliches verzögern der Prozedur) wartet die Prozedur. Oder ist das noch kein Überlauf in deinem Sinn.
Die Frage ob man die ActiveX-Komponente zu Beginn übergehen kann, kann ich nicht beantworten. Wo überhaupt zu beginn?
Ich hab mal versucht ein OnError GoTo err_exit zu schreiben
Unter err_exit:
Call CmdStop (das ist der Button in Tabelle1 Privat Sub CmdStop_Click()) - wird nicht erkannt.
Auch ein Unload frmTimer wird nicht erkannt, als ich versuchte in der err_exit: per F8 schrittweise zu testen. Hab keine Idee wie man eine Error Routine auf ihre Funktion im Ernstfall testen kann.
Viele Grüße
Michael
Anzeige

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige