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.

VBA - Workbook speichern und schließen wenn Win gesperrt
#1
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ß
Antworten Top
#2
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)
Antworten Top
#3
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))
Antworten Top
#4
Den Scheduler kannst du so aktivieren:
https://www.administrator.de/forum/sperr...43809.html
Schöne Grüße
Berni
Antworten Top
#5
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ß
Antworten Top
#6
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


Angehängte Dateien
.xlsm   DesktopLocked.xlsm (Größe: 21,09 KB / Downloads: 12)
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top
#9
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.

.xlsm   AutoSchliessen mit UF-CountDown.xlsm (Größe: 27,55 KB / Downloads: 6)
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#10
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)
Antworten Top


Gehe zu:


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