wie kann ich per VBA prüfen, wie lang eine bestimmte oder aktuelle Datei schon offen ist?
Kann man das im Format mm:ss anzeigen lassen?
LG
Urmila
'Prozedur unter DieseArbeitsmappe:
Private Sub Workbook_Open()
timeOpened = Now()
End Sub
'Code in einem allgemeinen Modul:
Public timeOpened As Date
Sub geoeffnet()
Dim DauerGeoeffnet As Date
DauerGeoeffnet = Now - timeOpened
MsgBox "Datei ist " & Mid(Format(DauerGeoeffnet, "hh:mm:ss"), 4) & " (mm:ss) geöffnet"
End Sub
Der Zeitpunkt wann die Arbeitsmappe geöffnet wurde wird zwar unter den Datei-Eigenschaften angezeigt, aber es ist in Excel-VBA nicht ohne weiteres möglich diese als BuiltinDocumentProperties abzufragen. Außerdem wird diese Zeit beim Speichern geändert.
Mit einigen Klimmzügen und einer Timer-gesteuerten Prozedur, die alle paar Sekunden die geöffneten Arbeitsmappen prüft könnte man die Informationen für alle Arbeitsmappen auch in der PersönlichenArbeitsmappe verwalten.
Gruß
Franz
Private Sub CommandButton1_Click()
Call geoeffnet
End Sub
Oder du verwendest den Commandbutton aus der Symbolleiste Formular und weist ihm das Makro "geoeffnet" zu.
Auf diese weise kannst du den Geöffnet-Zeitraum einer Datei gezielt abfragen, indem du diese Prozeduren alle in der entsprechendne Datei speicherst.
Wie schon in der letzten Antwort geschrieben ist die Überwachung des Geöffnet-Status aller Arbeitsmappen wesentlich komplizierter. Nachfolgend der Beispiel-Code, den du dann in deiner Persönlichen Makroarbeitsmappe speichern muss, damit es funktioniert.
Gruß
Franz
'############## Prozeduren unter Diese Arbeitsmappe ##############
'Beobachtung des Geöffnet-Zeitpunkts von Arbeitsmappen
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call TimeropenStop
End Sub
Private Sub Workbook_Open()
Call TimeropenStart
End Sub
'############## Prozeduren in einem allgemeinen Modul ###########
'Deklaration der modulweiten Variablen
Private TimerStart As Date 'Zeitpunkt der nächsten Ausführung der Prozedur
Private arrWorkbooks() As String 'Array für Namen der geöffneten Arbeitsmappen
Private arrTimeOpend() As Date 'Array für Datum/Uhrzeit des Öffnens der Arbeitsmappen
Sub TimeropenStop()
'Timer zum Verfolgen der Geöffnet-Zeit stoppen
On Error Resume Next
Application.OnTime EarliestTime:=TimerStart, Procedure:="TimerOpen", Schedule:=False
End Sub
Sub TimeropenStart()
'Timer zum Verfolgen der Geöffnet-Zeit starten
Call FelderInitialisieren
Call TimerOpen
End Sub
Sub TimerOpen()
'Prozedur, die rekursiv aufgerufen wird um geöffneten Arbeitsmappen zu prüfen
Call Pruefenworkbooks
'Alle 5 Sekunden per Timer diese Prozedur erneut starten
'Geöffnet-Zeitpunkt einer Datei wird mit max. 5 Sekunden Verzögerung erfasst.
TimerStart = Now + TimeSerial(Hour:=0, Minute:=0, Second:=5) 'gg. Zeit anpassenf
Application.OnTime EarliestTime:=TimerStart, Procedure:="TimerOpen"
End Sub
Private Sub FelderInitialisieren()
'Prozedur zum Initialisieren der Datenarrays beim Starten von Excel
Dim intI As Integer
If Workbooks.Count = 0 Then
ReDim arrWorkbooks(1 To 1)
ReDim arrTimeOpend(1 To 1)
Else
ReDim arrWorkbooks(1 To Workbooks.Count)
ReDim arrTimeOpend(1 To Workbooks.Count)
For intI = 1 To Workbooks.Count
arrWorkbooks(intI) = Workbooks(intI).Name
arrTimeOpend(intI) = Now
Next
End If
End Sub
Private Sub Pruefenworkbooks()
Dim intI As Integer, bolGeschlossen As Boolean, bolNeu As Boolean, wb As Workbook
'geschlossene Workbooks in Array auf "" setzen
For intI = 1 To UBound(arrWorkbooks())
bolGeschlossen = True
For Each wb In Workbooks
If wb.Name = arrWorkbooks(intI) Then
bolGeschlossen = False
Exit For
End If
Next
If bolGeschlossen = True Then
arrWorkbooks(intI) = ""
End If
Next
'neu geöffnete Workbooks in Array aufnehmen
For Each wb In Workbooks
bolNeu = True
For intI = 1 To UBound(arrWorkbooks())
If wb.Name = arrWorkbooks(intI) Then
bolNeu = False
Exit For
End If
Next
If bolNeu = True Then
'Arrays neu dimensionieren
ReDim Preserve arrWorkbooks(1 To UBound(arrWorkbooks) + 1)
ReDim Preserve arrTimeOpend(1 To UBound(arrWorkbooks) + 1)
'Daten ins Array schreiben
arrWorkbooks(UBound(arrWorkbooks)) = wb.Name
arrTimeOpend(UBound(arrWorkbooks)) = Now
End If
Next
End Sub
Sub GeoeffnetAktiv()
'Anzeigen für aktive Arbeitsmappe
Call ZeitGeoeffnetMappe("")
End Sub
Sub GeoeffnetMappe1()
'Anzeigen für Arbeitsmappe "Mappe1.xls"
Call ZeitGeoeffnetMappe("Mappe1.xls")
End Sub
Private Sub ZeitGeoeffnetMappe(strMappe As String)
Dim intI As Integer, DauerGeoeffnet As Date
'Geöffnet-Zeit der Arbeitsmappe anzeigen
If strMappe = "" Then strMappe = ActiveWorkbook.Name
For intI = 1 To UBound(arrWorkbooks())
If LCase(strMappe) = LCase(arrWorkbooks(intI)) Then
DauerGeoeffnet = Now - arrTimeOpend(intI)
MsgBox "Datei " & strMappe & " ist " & Mid(Format(DauerGeoeffnet, "hh:mm:ss"), 4) _
& " (mm:ss) geöffnet"
Exit For
End If
Next
End Sub
Um die Zeit zu ermitteln, wie lange eine Datei in Excel offen ist, kannst du ein einfaches VBA-Skript verwenden. Hier sind die Schritte, um das Skript einzufügen und auszuführen:
ALT + F11
, um den VBA-Editor zu öffnen.Einfügen
> Modul
.Füge den folgenden Code ein:
'Prozedur unter DieseArbeitsmappe:
Private Sub Workbook_Open()
timeOpened = Now()
End Sub
'Code in einem allgemeinen Modul:
Public timeOpened As Date
Sub geoeffnet()
Dim DauerGeoeffnet As Date
DauerGeoeffnet = Now - timeOpened
MsgBox "Datei ist " & Mid(Format(DauerGeoeffnet, "hh:mm:ss"), 4) & " (mm:ss) geöffnet"
End Sub
Excel-Arbeitsmappe mit Makros
(*.xlsm).Entwicklertools
> Einfügen
, und füge einen CommandButton
ein.Code anzeigen
.Private Sub CommandButton1_Click()
Call geoeffnet
End Sub
Jetzt hast du einen Button, der die Zeit anzeigt, wie lange die Datei geöffnet ist.
Falsche Zeitanzeige: Wenn die MsgBox eine ungenaue Zeit wie 24:38
anzeigt, kann das daran liegen, dass die Variablen zurückgesetzt wurden. Stelle sicher, dass du den Workbook_Open
-Code im richtigen Modul gespeichert hast.
Code nicht funktional: Überprüfe, ob der Code in einem allgemeinen Modul und nicht in einem Arbeitsmappenmodul gespeichert ist. Der Code für die Zeiterfassung muss gut strukturiert sein.
Button funktioniert nicht: Achte darauf, dass der Button korrekt mit der geoeffnet
-Prozedur verbunden ist.
Anstatt VBA zu verwenden, kannst du auch Excel-Formeln oder Power Query nutzen, um die Dateizugriffszeit zu überwachen. Dies ist jedoch weniger flexibel und nicht so direkt wie die VBA-Lösung.
Hier sind einige praktische Beispiele, wie du die VBA-Funktion verwenden kannst:
Aktive Arbeitsmappe: Um die Zeit für die aktuelle Arbeitsmappe zu ermitteln, kannst du den geoeffnet
-Code direkt aufrufen, ohne Parameter.
Bestimmte Arbeitsmappe: Wenn du die Zeit für eine spezifische Arbeitsmappe abfragen möchtest, passe die ZeitGeoeffnetMappe
-Prozedur entsprechend an.
Timer-Funktionalität: Du kannst die Überwachung der Geöffnet-Zeit durch Verwendung einer Timer-Prozedur automatisieren, die regelmäßig den Status der geöffneten Arbeitsmappen überprüft.
Fehlerbehandlung: Integriere Fehlerbehandlungsprozeduren in deinen VBA-Code, um sicherzustellen, dass unerwartete Fehler sauber behandelt werden.
Benutzerdefinierte Funktionen: Erstelle benutzerdefinierte Funktionen, um die Zeit in verschiedenen Formaten anzuzeigen oder zu speichern.
1. Wie kann ich die Zeitüberwachung für alle geöffneten Dateien aktivieren? Du kannst eine erweiterte VBA-Prozedur verwenden, die alle geöffneten Arbeitsmappen überwacht. Die entsprechenden Codes sind im Thread beschrieben.
2. Was tun, wenn der Code nicht funktioniert? Überprüfe die Verknüpfungen zwischen dem CommandButton und der Prozedur. Stelle sicher, dass alle Module korrekt eingerichtet sind.
3. Ist VBA in allen Excel-Versionen verfügbar? Ja, VBA ist in den meisten Excel-Versionen, einschließlich Excel 2010, 2013, 2016, 2019 und Office 365 verfügbar.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen