Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Countdown nach Vorbild Sparkasse
#11
Hallöchen,
Dein Timer läuft doch bis in A1 0 steht. Mit De.m.. Change setzt Du einfach nur den Wert in A1 wieder auf den Ausgangspunkt oder irgendwo hin.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12
...ja nein... das Konstrukt soll doch überwachen ob jemand aktiv auf der Datei ist. 
Bei Inaktivität wird die Datei geschlossen und gelöscht.

Heißt also - bei jedem Klick in eine Zelle muss der Timer wieder von vorn anfangen...  Blush
Antworten Top
#13
Hallöchen,
Genau das passiert doch dann. Du musst in Deinem Timer nur noch das verlassen von Excel bei 0 programmieren statt nur Exit Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#14
... also das verstehe ich nicht.
der Timer muss doch irgendwie mit selectionChange wieder neu gestartet werden.
Wenn der bis Null zählt obwohl ich auf dem Blatt hin und her fuchtel, dann macht der Datei doch aus obwohl ich aktiv bin.
Antworten Top
#15
Hallöchen,
Dein Timer zählt aber nicht bis 0 sondern er ändert den Inhalt von A1 Wenn Dein Timer dann merkt dass in A1 0 steht ist Schluss.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
hm... also irgendwie scheinen wir nicht vom selben zu reden...
wenn ich auf der Datei in dem selectierten Bereich klicke, dann macht die Anzeige in A1 garnichts, ausser weiter runter zu zählen.

Und wie ich gerade feststelle klappt auch das nicht ganz, da ich die Datei vor gut 15min verlassen habe um Online zu arbeiten und als ich gerade zum prüfen zurück komme, zählt der auf 5min gestellte Zähler die letzten Sekunden auf Null runter.

Irgendwie klappt das nicht so wie angedacht.
Antworten Top
#17
Hallo Klaus,

für mich sieht es so aus, dass Du den Umgang mit OnTime nicht (richtig) verinnerlicht hast. Wink
Ein Makro, das sich per OnTime immer wieder selbst aufruft, darf nur einmal angestoßen werden.
Danach geht es erst einmal um das richtige Abbrechen dieser Dauerschleife.

Schau doch mal hier rein: Applicaton.OnTime - Zeitgesteuerte Makros

Du hast auch noch etwas Wichtiges nicht beachtet: Verwende immer eindeutige Makro-, Modul- und Variablennamen! In Excel VBA gibt es schon die interne Funktion Timer, wehalb es nicht ratsam ist, ein Makro ebenso zu benennen. Wink

Gruß Uwe
Antworten Top
#18
Hallöchen,

also, das Zeitmakro könnte so aussehen. Ich hab das jetzt mal mit einer fixen Zahl in A1 gemacht, z.B. 5 für 5 Minuten, könntest aber auch wie gehabt eine Zeitangabe verwenden. Zu Beginn trägst Du also in A1 eine 5 ein und dann startest Du das Makro myTimer. Sobald Du in der Tabelle irgendwo klickst, wird die Zahl in A1 wieder auf 5 gesetzt und myTimer läuft entsprechend lange weiter.
Beim Schließen beachtest Du noch aus dem verlinkten Beitrag das Beenden. Ansonsten, wenn Du mehrere Dateien hast und schließt die mit dem Timer, läuft er weiter und trägt dir in der dann aktiven Datei auf dem aktiven Blatt in A1 die nächste Zahl ein falls dort eine steht oder bringt einen Fehler oder wenn dort nix steht hört es unauffällig auf (wenn Du die Zeile mit A1 wie hier an der ursprünglichen Position lässt)...

Code:
Option Explicit

Sub myTimer()
     Dim interval
     interval = Now + TimeValue("00:00:02")
     If Range("A1").Value = 0 Then Exit Sub
     Range("A1") = Range("A1") - 1
     Application.OnTime interval, "myTimer"
End Sub

und das Selection_Change so

Code:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Range("A1") = 5
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#19
@Kuwer,
vielen Danke für deine Nachricht. Natürlich habe ich das (noch) nicht verinnerlicht. Wenn ich von dem was ich erfrage Ahnung hätte, dann würde ich wahrscheinlich am anderen Ende des Tisches sitzen...
Ich kann also nur beschreiben was vor mir am Bildschirm passiert wenn ich den genannten Code in der Form wie beschrieben benutze.

Ich hab die vorgeschlagene Webseite nun gelesen. Es liest sich schwer was dort geschrieben steht. Das hat sicher Hand und Fuß was dort steht, jedoch mag ich diese Art von "drumrum erklären" überhaupt nicht. Das macht es mir ein bisschen schwer das zu verstehen / verinnerlichen. Aber ich lerne mit jedem Projekt was ich fummle immerhin etwas dazu. Das wiederum macht mir Freude  :)


@schauan,
Habe den Code nun so verbaut.
Bei klick in eine Zelle wird nun in A1 der Timer jedesmal neu gestartet. Das sieht schon mal sehr schön aus :D

In dem verlinkten Beitrag wird unter anderem beschrieben, wie ich onTime stoppe. Für unseren Code würde das also so aussehen!?
Code:
Application.OnTime interval, "myTimer", , False

Zum Verständnis:
A) ich starte den Timer mit öffnen der Datei (also nur einmal)
B) bei schließen der Datei - Private Sub Workbook_BeforeClose(Cancel As Boolean) - setze ich oben genannten Code
c) wie / wo rufe ich den ausführenden Code auf der die Datei schließt / löscht? A1 steht auf Null und jetzt? Frage ich jetzt irgendwo ab ob A1 auf Null steht damit der Code startet? Oder was erkennt jetzt dass das schließen / löschen Makro ausgeführt werden soll?

"Habe den Code nun so verbaut.
Bei klick in eine Zelle wird nun in A1 der Timer jedesmal neu gestartet..."

Das stimmt wohl so nicht... Der Timer startet ja nicht neu wie ich gelernt hab. Ich starte Ihn ja nur einmal beim laden der Datei. 
Wie nennt man das also? Ich lade Ihn mit jedem Klick neu?
*grübel
Antworten Top
#20
Guten Abend miteinander,

ich habe nun versucht den Ratschlägen zu folgen und verzweifel aber gleich.

Sinn ist es ja, die Datei wenn sie nicht benutzt wird, zu schließen und zu löschen. ein Timer in A1 zeigt die verbleibende Restzeit bis dahin an.

Mein zuvor geschriebener Plan onTime mit "Application.OnTime interval, "myTimer", , False" zu stoppen fruchtet nicht...  :22:

Ich habe nun nochmal eine Beispieldatei gebaut in welcher der Timer so eingebaut ist.
  • In Spalte A wird bei Start der Datei der Wert 500 runter gezählt (damit man genug Zeit hat sich das anzuschauen)
  • Mit Klick in eine Zelle wird in A der Wert auf 20 gesetzt. (damit man den Ablauf testen kann)
  • Mit Klick auf den Button darunter wird der Wert wieder erhöht auf 500
Bis hierhin soweit so gut. 
  • Lässt man den Timer nun ablaufen, dann schließt die Datei zwar korrekt, aber sie wird nicht gelöscht. Es erscheint nun die Fehlermeldung "Zugriff verweigert".
  • Schließt man die Datei während der Timer läuft über das rote X, dann wird die Datei korrekt geschlossen. Auch wird sie aus dem Verzeichnis gelöscht. Aber Excel / oder Windows(?) meldet unmittelbar danach, dass die soeben gelöschte Datei nicht gefunden werden kann. Vermutlich erfolgt diese Meldung durch den fehlenden onTime stopper.

Wäre bitte jemand so lieb und schaut sich das mal an? Ich bekomme kein gescheites Ergebnis heraus.

Liebe Grüße
Klaus


Angehängte Dateien
.xlsm   a2.xlsm (Größe: 21,72 KB / Downloads: 2)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste