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.

Zeitgeberfuktion: Timer soll bei Eingabe neu starten
#1
Hallo.

Eine TagesDoku im Internat bleibt über eine längere Zeit geöffnet, auch damit sie schnell verfügbar ist und weil mehrere Personen an ihr arbeiten. Zwischendurch aber auch längere Zeit niemand. Aufgrund dessen, dass einige digital gänzlich unbedarfte Nutzer an der Doku arbeiten, ist es erforderlich, dass sie automatisch zwischenspeichert. Das erledige ich mit -> siehe unten. Beziehungsweise bislang mit der Anweisung "SetStartTime" im Workbook_Open-Code, denn leider speichert Excel mit den unten angezeigten Codes verzögert nach jeder Eingabe.

Ist es hinzukriegen, dass immer nur ein "Timer" läuft, der bei jeder Eingabe auf 0 gesetzt wird? Damit nur nach der vorläufig letzten Eingabe gespeichert wird?

Grüße
Uwe



DieseArbeitsmappe

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
    SetStartTime
End Sub


Allgemeines Modul

Code:
Dim dblZeit As Double

Sub SetStartTime()
dblZeit = Now + TimeValue("00:01:00")
Application.OnTime dblZeit, "MappeSpeichern"
End Sub

Sub MappeSpeichern()
dblZeit = Empty
Workbook_BeforeSave
'ThisWorkbook.Save
End Sub

Sub Workbook_BeforeSave()
    If ThisWorkbook.Path = "" Then
        On Error Resume Next
        Application.EnableEvents = False
        Cancel = True
        Application.Dialogs(xlDialogSaveAs).Show "TagesDoku " & ThisWorkbook.Worksheets("Übergabe").Range("B1").Value, 52
        Application.EnableEvents = True
        On Error GoTo 0
    End If
    ThisWorkbook.Save
End Sub
Antworten Top
#2
Hi,

ich ahne, was Du eigentlich wirklich willst. Du hättest aus Excel gern eine mehrbenutzerfähige Anwendung gemacht... ;)
Doch wenn mehrere Nutzer eine irgendwo auf dem Server liegende Datei gemeinsam nutzen, kann nur der 1. Anwender uneingeschränkt damit arbeiten. Alle anderen dürfen sie sich ansehen und/oder auf Rückmeldung warten. Da hilft es auch nicht, wenn der 1. Nutzer die Datei speichert. Er muss sie explizit schließen... erst danach darf der 2. damit arbeiten  usw.... 
Bei wenigen Nutzern und geringer Nutzungsfrequenz mag das noch angehen, aber wenn oft von vielen daran gearbeitet werden muss, dann solltet ihr euch für eine mehrbenutzerfähige Anwendung (z. Bsp. Datenbank) entscheiden.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Hallo Ralf,

nein, die Teams bestehen aus max. 5 Personen, die in einer Internatsgruppe zusammenarbeiten. Und zumindest unsere Datei befindet sich auf unserem PC, zumal unsere Leitung nicht die schnellste ist im Bonner Hinterland. Für die Internatsleitung habe ich unsere Doku mit dem Server verknüpft. Kann es unter diesen Bedingungen überhaupt passieren, dass Einträge verloren gehen, weil sie nicht abgespeichert werden? - Ja, leider!!

Gruß
Uwe
Antworten Top
#4
...ah ja.... mehrere Teams mit jeweils mehreren Nutzern. Jeder Nutzer hat seine eigene Datei....

Ich würde in diesem Fall so vorgehen:

Jedes Team erhält einen eigenen Ordner. Evtl. noch einen Ordner für alle Teams... Und die Teamordner als Subfolder.
Darin enthalten alle Nutzerdateien.

Einlesen kannst Du alle Dateien am Stück oder einzeln, über eine separate Datei mit Power Query.

Zum Timer:
Verstehe die Frage nicht ganz. Starten da mehrere Timer? Sollte doch immer  nur der letzte sein... ?¿?
Aber nehmen wir an, es wäre so, deklariere doch eine globale boolsche Variable die Du in SetStartTime auf true  und in MappeSpeichern wieder auf false setzt. Dann kannst Du im Change Ereignis sagen, nur wenn die boolsche Variable false ist soll SetStartTime aufgerufen werden.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#5
Hi, danke, ja. Es starten so viele Timer, wie ich Ereignisse auslöse. Ist der Timer auf 1 Minute gestellt und ich gebe was ein, dann nochmal in 10 und nochmal in 5 Sekunden, speichert Excel in 60, in 70 und in 75 Sekunden. Bescheuert!

Ist das so, das normalerweise der Timer bei jeder Eingabe neu startet, auch wenn noch Restzeit drauf ist? Das wäre geil, denn das kriege ich nicht hin. Wenn mir da eine(r) weiterhelfen könnte?

Aber immerhin habe ich deinen Tipp umsetzen können, so dass wenigstens nicht mehrere Timer gleichzeitig laufen und nicht ständig gespeichert wird:

DieseArbeitsmappe
Code:
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal target As Excel.Range)
   
        SetStartTime

End Sub


Allgemeines Modul
Code:
Public bolTimerGestartet As Boolean
Dim dblZeit As Double

Sub SetStartTime()
dblZeit = Now + TimeValue("00:01:00")
    Application.OnTime dblZeit, "MappeSpeichern"
    bolTimerGestartet = True            '<<<neu
End Sub

Sub MappeSpeichern()
dblZeit = Empty
    If bolTimerGestartet = True Then    '<<<neu
        Workbook_BeforeSave
    End If                              '<<<neu
    bolTimerGestartet = False           '<<<neu
End Sub

Sub Workbook_BeforeSave()
    If ThisWorkbook.Path = "" Then
        On Error Resume Next
        Application.EnableEvents = False
        cancel = True
        Application.Dialogs(xlDialogSaveAs).Show "TagesDoku " & ThisWorkbook.Worksheets("Übergabe").Range("B1").Value, 52
        Application.EnableEvents = True
        On Error GoTo 0
    End If
    ThisWorkbook.Save
End Sub
Antworten Top
#6
In der Microsoft Dokumentation steht es doch drinne wies geht.

https://docs.microsoft.com/en-us/office/...ion.ontime
Antworten Top
#7
Auch Hallo,

und noch eine Erklärung zu OnTime.

Noch was: Vermeide bitte Prozedurnamen die gleichlautend mit Ereignissen sind.
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


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