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.

Fehler im Code OnTime / Ablauf?
#1
Hallo miteinander,

ich habe vor längerer Zeit mit Eurer Hilfe einen Code für meine Datei zusammenstellen können.
(Datei schließen nach Ablauf einer Zeit)

Nun habe ich das Phänomen, dass die Datei sich vor Ablauf der Zeit von selbst schließt, wenn sie nicht im Vordergrund steht.
Sie schließt sich augenscheinlich mit dem Ablauf des eingestellten Zählintervalls von 1min.
(Der Zähler zählt z.B. nicht schneller runter wenn die Datei im Hintergrund ist - getestet mit nur leicht überlagerter Datei)

Lässt man den Timer aus, dann bleibt die Datei im Vorder- wie auch im Hintergrund einwandfrei stehen.

Wenn ich die Bausteine des Timers in eine Beispieldatei einbaue, dann funktioniert der Timer und zählt auch im Hintergrund brav runter.


Meine Frage nun:
Was steht bei "Timer" und "Datei im Hintergrund" im Zusammenhang?

An welcher Ecke könnte ich nach dem Fehler suchen?



Code:
Public interval As Date
Sub timer_halt()
Application.OnTime interval, "myTimer", , False
Call stopp_myTimer
End Sub

Sub myTimer()
    If [a4] = 0 Then 'in a4 steht voreingestellt eine 20
       On Error Resume Next
       Application.OnTime interval, "myTimer", , False
        Application.OnTime interval, "stopp_myTimer"
      
   Else
       [a4] = [a4] - 1
        interval = Now + TimeValue("00:01:00")
        Application.OnTime interval, "myTimer"
    End If
End Sub
 
Sub stopp_myTimer()
  With ThisWorkbook
      .Saved = True
      .ChangeFileAccess xlReadOnly
      kill .FullName
      ThisWorkbook.Close -1
   End With
End Sub


Viele Grüße
Klaus


Angehängte Dateien
.xlsm   timertest1.xlsm (Größe: 12,76 KB / Downloads: 1)
Antworten Top
#2
Hallo Klaus,

schau mal hier! Wink

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Klaus
Antworten Top
#3
ohhhh mein Gott... du meinst das hier?

:16:

das muss ich morgen ja gleich mal testen wenn ich wieder an das Original komme...


mist... screenshot kann man nicht einfügen....

also das hier meinte ich:

Eventuell wäre von Vorteil, noch konkret das Blatt in der Datei anzusprechen, falls Du mal eine andere Datei offen hast?

If ThisWorkbook.Sheets("Tabelle1").Range("A2").Value <> "Originaldatei" Then Kill .FullName
Antworten Top
#4
Hallöchen nochmal,

also der Hinweis passt noch nicht glaube ich.

"...falls Du mal eine andere Datei offen hast"

Die Korrektur des Codes dort bezieht sich ja auf den Teil des "Datei Killens". Das funktioniert aber so wie es ist.
Die Datei verschwindet aber, bevor sie das Ende des Timers überhaupt erreicht.

Oder übersehe ich wieder irgendwas?

Viele Grüße 
Klaus
Antworten Top
#5
Hallo Klaus,

in Deinem Code gibt es nur [A4]. Da gibt es weder eine Referenz auf ein bestimmtes Worksheet noch auf das entsprechendes Workbook!

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Klaus
Antworten Top
#6
Oha... ja, du hast natürlich Recht. Er springt genau in die Zeile und debuggt da wenn ich eine Referenz (nur) auf das Blatt gebe.

Leider habe ich jetzt ein Problem.
Das Konstrukt ist so aufgebaut, dass von der Hauptdatei immer eine Kopie angefertigt wird.
Diese Kopie hat immer einen von 5 verschiedenen Namen.

Ich kann also irgendwie im Vorfeld nicht die richtige Datei ansprechen.

Ich würde jetzt passend zum Dateinamen in irgend eine Zelle eine entsprechende Zahl beim erstellen der Datei eintragen lassen.
Diese Zahl dann beim Timer prüfen lassen und demnach 5 verschiedene "Anreden" für den Timer stricken....

Ginge das vielleicht noch irgendwie intelligenter?  :22:

...moment... ich optimiere  :20:

Ich schreibe keine Zahl beim Erstellen der Kopie sondern frage im Timer einfach die 5 Dateinamen ab....

Ginge es noch einfacher irgendwie?
Antworten Top
#7
Hahaaa... Juhuu... es geht wirklich viel einfacher...

Vielen lieben Dank an Uwe!

Ich habs nun so gelöst:
"ThisWorkbook.Worksheets("Blatt1").[a4] = 0 Then"

Bis jetzt gehts damit  :05:

Viele Grüße
Klaus
Antworten Top


Gehe zu:


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