Hi leute,
im Prinzip habe ich im topic bereits alles wichtige erwähnt. Gibt es ein Makro welches auslöst, sobald Windows gesperrt wird (Win10) und dann das workbook vorher speichert?
Problem besteht bei der Arbeit, da wir dort diverse Rechner haben an denen man sich anmelden kann. Wenn man nun die Datei geöffnet lässt sperrt die sich damit und man sucht in der Folge den richtigen pc an dem man noch angemeldet ist. Einstellungen am pc selber kann ich keine ändern.
Gruß
Hallo,
in den Windows Tasks (Aufgabenplanung) gibt es das Event "Anzeigensperre".
Versuche dich einmal daran und bitte um feedback.
mfg
(ich kann mich noch gut an einen (fehlgeschlagenen) Versuch vor Monaten erinnern)
Hallo,
den "Windows Scheduler" einzustellen überlasse ich anderen, aber wenn mit dem Scheduler ein Workbook mit diesem Code gestartet wird, klappt es unter XL2016:
Code:
Sub F_en()
'Mappe1.xlsx ist offen
'ThisWorkbook wird neu gestartet (vom Scheduler)
'dieser Code sollte in Workbook.Open
'zum prüfen
For i = 1 To Workbooks.Count
Debug.Print Workbooks(i).Name
Next i
With Workbooks("Mappe1.xlsx")
.Sheets(1).Range("A2") = "neu"
.Save
.Close
End With
End Sub
mfg
(falls der Name des Workbooks nicht bekannt sein sollte, kann er auch in den Tasks gesucht werden (in MS Word: for each Ts in Tasks))
Hi leute,
Vielen Dank für eure Rückmeldung. Wenn ich das richtig verstanden habe muss ich Einstellungen bei Windows vornehmen. Dies ist allerdings absolut unmöglich auf den arbeitsrechnern. Eine methode, bei der ich einzig in Excel arbeite gibt es dann so nicht?
Gibt es denn als Alternative einen code, mit dem Excel alle 30 Minuten speichert und die Mappe schließt? (zwischenfrage: wisst ihr aus dem Kopf ob das Schließen auch funktioniert wenn der pc gesperrt ist? Werde es sonst ausprobieren)
Gruß
Die folgende Funktion liefert den Status zurück
PHP-Code:
Option Explicit
Private Declare Function SwitchDesktop Lib "user32" (ByVal hDesktop As Long) As Long
Private Declare Function OpenDesktop Lib "user32" Alias "OpenDesktopA" (ByVal lpszDesktop As String, ByVal dwFlags As Long, ByVal fInherit As Long, ByVal dwDesiredAccess As Long) As Long
Private Declare Function CloseDesktop Lib "user32" (ByVal hDesktop As Long) As Long
Private Const DESKTOP_SWITCHDESKTOP As Long = &H100
Function desktopLocked() As String
Dim p_lngHwnd As Long
Dim p_lngRtn As Long
Dim p_lngErr As Long
Dim System As String
p_lngHwnd = OpenDesktop(lpszDesktop:="Default", dwFlags:=0, fInherit:=False, dwDesiredAccess:=DESKTOP_SWITCHDESKTOP)
If p_lngHwnd = 0 Then
System = "Error"
Else
p_lngRtn = SwitchDesktop(hDesktop:=p_lngHwnd)
p_lngErr = Err.LastDllError
If p_lngRtn = 0 Then
If p_lngErr = 0 Then
System = "Locked"
Else
System = "Error"
End If
Else
System = "Unlocked"
End If
p_lngHwnd = CloseDesktop(p_lngHwnd)
End If
desktopLocked = System
End Function
Und das prüfst Du regelmässig, z.B. alle fünf Minuten. Das ginge z.B. mit Application.Ontime, siehe
hier
Update Anbei Demodatei
No storax. .
Vielen dank für deinen Beitrag. Habe momentan nur mein Handy dabei, kann deine datei also nicht testen. Mache ich dann aber morgen.
Kannst du mir noch kurz erklären was der Code genau macht? Der arbeitsrechner ist nämlich ziemlich eigen - sprich es ist kein speichern einer zwischen datei Oder so möglich. Also Excel darf wirklich nur auslesen.
Vielleicht kannst du ja in Worten kurz erklären was der Code genau macht.
Danke
Das, was Du gerne hättest
- Die Schaltfläche "Start" startet den Timer (z.Zt alle 3 Sekunden)
- Alle drei Sekunden wird jetzt geprüft, ob die Workstation gesperrt ist
- Ist die Workstation gesperrt, wird die Datei gesichert, der Timer beendet und die Datei geschlossen
- Ist die Workstation nicht gesperrt, wird der nächste Lauf gestartet
Die Schaltfläche "Windows sperren" dient nur dazu, Dir das Drücken von Win+L abzunehmen :19:
Was mich wunderst, dass Du jetzt schreibst "Also Excel darf wirklich nur auslesen"! Was soll das bedeuten?
Wenn ich das so lese, befürchte ich fast ... schon wieder ein Help Vampire
Hallo,
aus den anderen Beiträgen konnte ich wieder etwas lernen!
Eine andere/zusätzliche Frage wäre, das Einschalten des ScreenSavers abzufragen. Trotz häufigem GDS habe ich diesen älteren Beitrag gefunden (2002):
Code:
'https://www.mrexcel.com/forum/excel-questions/523494-vba-determine-whether-screen-saver-running.html
Option Explicit
Private Declare Function SystemParametersInfo _
Lib "user32" Alias _
"SystemParametersInfoA" _
(ByVal uAction As Long, _
ByVal uParam As Long, _
ByRef lpvParam As Long, _
ByVal fuWinIni As Long) As Long
Private Const SPI_GETSCREENSAVERRUNNING As Long = &H72
Sub Test()
If IsScrSaverRunning Then MsgBox "Screen Saver is active"
End Sub
Private Function IsScrSaverRunning() As Boolean
Dim lScrSrvRunning As Long
SystemParametersInfo _
SPI_GETSCREENSAVERRUNNING, vbNull, lScrSrvRunning, vbNull
IsScrSaverRunning = CBool(lScrSrvRunning)
End Function
mfg
(ungeprüft)