Sicher bin ich blind oder so...
Aber ich finde keine passende Lösung.
Mehrere Dateien sind offen.
Eine spezielle davon soll nach 5 Minuten Untätigkeit ohne zu speichern automatisch geschlossen werden.
Kann jemand helfen?
Gruß
Werner
'time-Variable Dim time As Double Sub CloseAfter5Minutes() '"CloseTheWorkbook" ist der Name der aufzurufenden Funktion 'Timer auf 4 Sekunden 'Den alte OnTime-Funktion "löschen" On Error Resume Next Application.OnTime time, "CloseTheWorkbook", , False On Error GoTo 0 'Neuen Timer setzen time = Now + TimeValue("00:00:04") Call Application.OnTime(time, "CloseTheWorkbook") End Sub Gruß, Tobi http://vba-blog.de/
AW: Datei bei Untätigkeit schließen
Tobias
AW: Datei bei Untätigkeit schließen
Werner
Das Beispiel war super. Klappt prima! VIELEN DANK!!! Gruß Werner
AW: Datei bei Untätigkeit schließen
Werner
Habe da noch was... Kann man das mit der Zeitschleife irgendwie am Ende auch wieder stoppen. Nach einer Weile kommen seltsame Meldungen, dass er die Datei, die sich geschlossen hat, nicht finden kann. Gruß Werner
AW: Datei bei Untätigkeit schließen
Tobias
Ich hatte die Hoffnung, dass dieses Event das machen sollte.
|
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Die alte OnTime-Funktion "löschen" On Error Resume Next Application.OnTime time, "CloseTheWorkbook", , False On Error GoTo 0 End Sub
AW: Datei bei Untätigkeit schließen
Werner
Auch das bringt nicht den gewünschten Erfolg. Leider.
AW: ich kann das nicht nachvollziehen...
Chris
...das Ganze funktioniert einwandfrei, hast du die Makros im richtigen Modul (DieseArbeitsmappe). Gruß Chris
Ich kann das auch nicht nachvollziehen...
Tobias
Bei mir klappt's auch.
AW: Ich kann das auch nicht nachvollziehen...
Werner
Also so sieht das bei mir aus: "Diese Arbeitsmappe": Dim time As Double
AW: Ich kann das auch nicht nachvollziehen...
Chris
Servus, ich kann da nichts Falsches entdecken: 2 Anmerkungen:
AW: Ich kann das auch nicht nachvollziehen...
Werner
Das hier läuft noch:
AW: Ich kann das auch nicht nachvollziehen...
Tino
Hallo, so müsste es funktionieren. Microsoft Excel Objekt DieseArbeitsmappe
Modul Modul1
AW: Ich kann das auch nicht nachvollziehen...
Werner
Ich habe alles so eingeben. Leider bringt er mir immer noch nach einer Weile Meldungen, nachdem die Datei geschlossen wurde. Erst wenn ich die 2. noch offene Excel-Datei schließe - also Excel komplett - ist es gut. Aber so soll das nicht sein.
AW: Poste mal die Datei...
Chris
... alles andere ist Rätselraten. Komischerweise funktioniert das ja bei allen anderen, nur bei dir nicht. Gruß Chris
AW: Ich kann das auch nicht nachvollziehen...
Tino
Hallo, so habe dies nochmals ausführlich getestet und so umgestellt wie ich dies immer mache. (bezüglich Variablen) Die Zeit steht auf 10 Sekunden, stelle diese in der Zeile TimeSerial(0, 0, 10) ein. (TimeSerial(Stunden,Minuten,Sekunden) Microsoft Excel Objekt DieseArbeitsmappe
Modul Modul1
AW: Ich kann das auch nicht nachvollziehen...
Werner
Es geht immer noch nicht. Hier mal die ganze Datei. Ich bin mir fast sicher, dass ich in irgendeinem Makro etwas reingebastelt habe, dass diese Probleme verursacht. https://www.herber.de/bbs/user/55378.xlt Bis hier hin schon mal DANKE für die Hilfe!!! Gruß Werner
AW: Ich kann das auch nicht nachvollziehen...
Chris
Servus, du hattest die Sub CloseAfter5Minutes 2 mal drin stehen, vllt. deswegen. Ich hab die eine gelöscht und das funktioniert einwandfrei. https://www.herber.de/bbs/user/55388.xls Es steht noch in Modul11. Gruß Chris
AW: Ich kann das auch nicht nachvollziehen...
Werner
Ich glaube jetzt passt es. Ich habe allerdings auch noch 2 Fehler entdeckt: im Code
AW: Datei bei Untätigkeit schließen
Chris
Servus Werner, im Prinzip so: in DieseArbeitsmappe: Dim altezeit
|
Public Sub CloseAfter5Minutes()
'Die alte OnTime-Funktion "löschen"
On Error Resume Next
Application.OnTime time, "CloseTheWorkbook", , False
On Error GoTo 0
'Neuen Timer setzen
time = Now + TimeValue("00:05:00")
Call Application.OnTime(time, "CloseTheWorkbook")
End Sub
und:
Private Sub Workbook_BeforeClose(cancel As Boolean)
On Error Resume Next
Application.OnTime time, "CloseTheWorkbook", , False
On Error GoTo 0
Application.WindowState = xlMaximized
ScrollbereichVollstaendig
LöscheSymbolleiste
ThisWorkbook.Saved = True
End Sub
"Tabelle1":
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call ThisWorkbook.CloseAfter5Minutes
End Sub
Modul:
Public Sub CloseTheWorkbook()
'MsgBox "jetzt"
ThisWorkbook.Close
End Sub
Würde mich nicht wundern, wenn ich was falsch gemacht hätte. ;-))
Kann es daran liegen, dass 2 Andere Exceldateien noch offen bleiben?
Genau das will ich nämlich auch.
Gruß
Werner
Public Sub CloseTheWorkbook()
'MsgBox "jetzt"
ThisWorkbook.Close False ' ohne Speicherabfrage
End Sub
2. der Timer wird nur neu gestartet, wenn in Tabelle1 was gemacht wird, wenn die anderen Tabellen geändert werden, dann geht die Datei trotzdem nach 5 Minuten zu.
Evtl. für alle sheets:
Workbook_SheetSelectionChange (in das Modul DieseArbeitsmappe) statt Worksheet_Change(in Tabelle1).
Hast du evtl noch ein weiters Before_Close-Ereignis ?
Gruß
Chris
Private Sub Workbook_close()
LöscheSymbolleiste
Application.WindowState = xlMaximized
'kill
End Sub
Aber das sollte doch nicht stören, oder?
'In DieseArbeismappe **************************************
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime time, "CloseTheWorkbook", , False
On Error GoTo 0
Application.WindowState = xlMaximized
ScrollbereichVollstaendig
LöscheSymbolleiste
ThisWorkbook.Saved = True
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call CloseAfter5Minutes
End Sub
Modul Modul1
'in ein Modul ******************************************
Option Explicit
Public time As Double
Sub CloseAfter5Minutes()
'Die alte OnTime-Funktion "löschen"
On Error Resume Next
Application.OnTime time, "CloseTheWorkbook", , False
On Error GoTo 0
'Neuen Timer setzen
time = Now + TimeValue("00:01:00")
Call Application.OnTime(time, "CloseTheWorkbook")
End Sub
Sub CloseTheWorkbook()
'MsgBox "jetzt"
ThisWorkbook.Close
End Sub
Gruß Tino
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime earliesttime:=time, procedure:="CloseTheWorkbook", schedule:=False
On Error GoTo 0
Application.WindowState = xlMaximized
ScrollbereichVollstaendig
LöscheSymbolleiste
ThisWorkbook.Saved = True
End Sub
Private Sub Workbook_Open()
Call CloseAfter5Minutes
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call CloseAfter5Minutes
End Sub
Modul Modul1
'in ein Modul ******************************************
Option Explicit
Public timer As Variant
Sub CloseAfter5Minutes()
'Die alte OnTime-Funktion "löschen"
On Error Resume Next
Application.OnTime earliesttime:=timer, procedure:="CloseTheWorkbook", schedule:=False
On Error GoTo 0
'Neuen Timer setzen
timer = Format(Now + TimeSerial(0, 0, 10), "hh:mm:ss")
Application.OnTime TimeValue(timer), "CloseTheWorkbook"
End Sub
Sub CloseTheWorkbook()
'MsgBox "jetzt"
ThisWorkbook.Close
End Sub
Sub ScrollbereichVollstaendig()
End Sub
Sub LöscheSymbolleiste()
End Sub
Gruß Tino
Public Sub CloseAfter5Minutes()
'Die alte OnTime-Funktion "löschen"
On Error Resume Next
Application.OnTime time, "CloseTheWorkbook", , False
On Error GoTo 0
'Neuen Timer setzen
time = Now + TimeValue("00:00:30")
Call Application.OnTime(time, "CloseTheWorkbook")
End Sub
fehlte beim ersten "CloseTheWorkbook" das 'e' bei close.
Außerdem hatte ich den Code 2 Mal drin.
Jetzt scheint es zu gehen.
Echt super, wie man hier weitergeholfen wird. ;-)
VIELEN DANK für die Hilfe!!!
Gruß
Werner
Private Sub Workbook_Open()
On Error Resume Next
neuezeit = Time + TimeSerial(0, 5, 0)
Application.OnTime EarliestTime:=altezeit, Procedure:="Schließen", Schedule:=False
altezeit = neuezeit
Application.OnTime neuezeit, "Schließen"
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
neuezeit = Time + TimeSerial(0, 5, 0)
Application.OnTime EarliestTime:=altezeit, Procedure:="Schließen", Schedule:=False
altezeit = neuezeit
Application.OnTime neuezeit, "Schließen"
End Sub
in ein Modul:
Sub Schließen()
MsgBox "jetzt zu"
ThisWorkbook.Close False
End Sub
Hierbei werden allerdings nur wirkliche Änderungen der Zelladressen registriert. Evtl. kann man das auch über Workbook_Activate satt Worsheet_SelectionChange machen, wenn das "benutzt" auch das Anschauen beinhalten soll.
Gruß
Chris