Clever-Excel-Forum

Normale Version: VBA - Workbook speichern und schließen wenn Win gesperrt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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))
Den Scheduler kannst du so aktivieren:
https://www.administrator.de/forum/sperr...43809.html
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 StringByVal dwFlags As LongByVal fInherit As LongByVal 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:=0fInherit:=FalsedwDesiredAccess:=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
Hi,

Alternativ
aus
https://www.ms-office-forum.net/forum/sh...p?t=322034

Die Datei schließt sich bei Inaktivität selbst nach 5 min.
Eben nach diesen 5 min erscheint eine Userform in welcher ein Countdown von 10 runterzählt, wird der Countdown nicht unterbrochen speichert und schließt sich die Datei selbst.
[attachment=19988]
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)