Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letzten Benutzer Speichern und auslesen

Forumthread: Letzten Benutzer Speichern und auslesen

Letzten Benutzer Speichern und auslesen
04.08.2022 11:22:15
Geheimratsecki
Hallo zusammen,
ich habe hier im Archiv folgendes gefunden:
https://www.herber.de/forum/archiv/1676to1680/1679234_Letzter_Benutzer_der_Datei_speichern.html

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Nutzer-Protokoll").Visible = True
With Sheets("Nutzer-Protokoll")
.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = Environ("Username")
.Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Date
.Cells(.Cells(Rows.Count, 3).End(xlUp).Row + 1, 3).Value = Time
End With
Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
End Sub

Private Sub Workbook_Open()
If Environ("Username")  "Eckstein" Then
Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
Else
Sheets("Nutzer-Protokoll").Visible = True
End If
End Sub

Habe zwei Fragen:
1. Wie kann ich mehrere User zum Anzeigen des Protokolls in den VBA-Code eintragen?
2. Möchte diese Funktion gleichzeitig mit dem Code
Function Speicherdatum()
Speicherdatum = ThisWorkbook.BuiltinDocumentProperties("last save time") & (" von ") & Application.UserName
End Function

laufen lassen, aber dieser versagt seine Funktion, sobald ich das andere Makro integriere.
Keine Fehlermeldung aber auch keine Aktualisierung.
Vielen Dank im Voraus.
LG Ecki
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 12:00:08
Rudi
Hallo,

Private Sub Workbook_Open()
Select Case LCase(Environ("Username"))
Case "eckstein", "mueller", "weber"
Sheets("Nutzer-Protokoll").Visible = True
Case Else
Sheets("Nutzer-Protokoll").Visible = xlSheetVeryHidden
End Select
End Sub
wozu die Ein-/ Ausblenderei im before_save?
Gruß
Rudi
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 13:19:53
Geheimratsecki
Hallo Rudi,
vielen Dank für die schnelle Antwort. :)
Das Ein-/Ausblenden war schon im Code drin. Fand ich auch nicht schlecht, so können andere User die Eintragungen nicht manipulieren.
Es könnte auch ständig eingeblendet sein, wenn man ein manuelles Löschen von nicht Autorisierten Personen verhindern kann.
Deswegen ja auch die 2. Frage. Sodass jeder sieht, wer als letzter an an der Datei war.
Welche ja aber in Verbindung mit dem Protokoll nicht klappt. Beim Autospeichern hingegen schon, wie ich gerade gesehen habe.
Jedenfalls hatte meine Datei einen neuen Eintrag in der Zelle =Speicherdatum() während ich Pause hatte.
Aber das Protokoll dagegen hatte keinen Eintrag.
Grüße
Ecki
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 14:17:27
onur
"dieser versagt seine Funktion, sobald ich das andere Makro integriere" - Wenn du nicht verrätst, WIE UND WO das integrierst, kann doch keiner wissen, was der Fehler ist - oder ?
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 14:27:02
Geheimratsecki
Hallo zusammen,
muss man hier in diesem Forum immer die Original-Anfrage wieder mit reinkopieren?
Da stand doch m.E. alles drin!?
Hallo zusammen,
ich habe hier im Archiv folgendes gefunden:
https://www.herber.de/forum/archiv/1676to1680/1679234_Letzter_Benutzer_der_Datei_speichern.html

   Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Nutzer-Protokoll").Visible = True
With Sheets("Nutzer-Protokoll")
.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = Environ("Username")
.Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Date
.Cells(.Cells(Rows.Count, 3).End(xlUp).Row + 1, 3).Value = Time
End With
Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
End Sub
Private Sub Workbook_Open()
If Environ("Username")  "Eckstein" Then
Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
Else
Sheets("Nutzer-Protokoll").Visible = True
End If
End Sub
Habe zwei Fragen:
1. Wie kann ich mehrere User zum Anzeigen des Protokolls in den VBA-Code eintragen?
2. Möchte diese Funktion gleichzeitig mit dem Code

Function Speicherdatum()
Speicherdatum = ThisWorkbook.BuiltinDocumentProperties("last save time") & (" von ") & Application.UserName
End Function

=Speicherdatum()
laufen lassen, aber dieser versagt seine Funktion, sobald ich das andere Makro integriere.
Keine Fehlermeldung aber auch keine Aktualisierung.

Grüße
Ecki
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 14:32:29
onur
Rede ich denn mit der Wand? WIE genau hast du die Funktion in den Code INTEGRIERT ?
Ausserdem: WO genau stehr der Code der Function?
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 14:41:44
Geheimratsecki
Hallo onur,
nein, mit mir, einem Laien. ;)
Userbild
Die Formel kann überall stehen. sie hat auch funktioniert, bis ich das andere Makro in dieselbe Datei integriert habe.
Die Funktion steht in allgemein
Das Makro in Workbook
Grüße
Ecki
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 14:52:21
onur
Ich glaube, ich verstehe langsam, was du erwartest: Dass, sobald die Datei gespeichert wurde, die Funktion sich selber "aufruft" und das Datum aktualisiert, aber so funktioniert Excel nicht. Du musst schon die Neuberechnung der Datei anstossen, nachdem die Datei gespeichert wurde.
Die Function sollte PUBLIC sein:

Public Function Speicherdatum()
Speicherdatum = ThisWorkbook.BuiltinDocumentProperties("last save time") & (" von ") & Application.UserName
End Function
Und in das Modul des Workbook (wo auch Workbook_Open steht)

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Application.Calculate
End Sub

Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 15:04:34
Geheimratsecki
Hallo onur,
das funktioniert leider nicht.
1. kommt nach dem speichern ja dann nochmal die Meldung Speichern, wenn die Datei geschlossen wird.
2. wird die Zelle trotzdem nicht aktualisiert.
Müssen die Codes eine bestimmte Reihenfolge im VBA haben?
Grüße
Ecki
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 15:05:45
onur
Poste doch mal die Datei.
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 15:31:12
onur
Wie gesagt: Als würde man mit der Wand reden....
Funktioniert doch, WENN man meinen Code in Workbook_AfterSave einfügt !
Siehe hier:
https://www.herber.de/bbs/user/154508.xlsm
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 16:27:37
Geheimratsecki
Aber leider nicht immer!
Oder besser gesagt, nur sporadisch! :(
Hab deine Datei jetzt mehrfach geöffnet, geschlossen, gespeichert...
Das Protokoll füllt sich, aber auf dem Arbeitsblatt wird nicht immer, die letzte Speicherzeit eingetragen.
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 16:56:39
Daniel
Hi
richtig.
das Problem ist, Formeln in einer Excelzelle werden nur dann neu berechnet bzw aktualisiert, wenn sich ein Wert einer Zelle, auf die die Formel referenziert, ändert.
Formeln wie diese ohne Referenz auf andere Zellen behalten daher immer ihren Wert, den sie beim Erstellen der Formel hatten, solange bis du mal in die Zelle reinklickst und die Formel quasi neu eingibst.
eine verbesserung der Situation kannst du bekommen, wenn du dem Code der Formel die Zeile
Application.Volatile
hinzufügst. Dann wird diese Formel aktualisiert, wenn du irgendeinen Zellwert änderst sowie beim Öffnen der Datei (aber nicht beim Speichern)
am sinnvollsten ist wahrscheinlich, wenn du die Information, wer die Liste zuletzt wann gespeichert hast, nicht per Formel in einer Zelle ausgibst, sondern im BeforeSave-Event hart in die Zelle schreibst, so wie du es im Protokoll auch machst.
Gruß Daniel
Anzeige
AW: Letzten Benutzer Speichern und auslesen
04.08.2022 17:05:38
onur
Sorry, hast Recht.
Ändere die Function wie folgt:

Public Function Speicherdatum()
Application.Volatile
Speicherdatum = ThisWorkbook.BuiltinDocumentProperties("last save time") & (" von ") & Application.UserName
End Function
UND ändere die Formel der Zelle(n) auf

=Speicherdatum() & ""
dann klappt es.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Letzten Benutzer in Excel speichern und auslesen


Schritt-für-Schritt-Anleitung

Hier ist eine einfache Anleitung, um den letzten Benutzer, der eine Excel-Datei gespeichert hat, zu protokollieren. Du benötigst dazu grundlegende Kenntnisse in VBA.

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge folgenden Code in das „ThisWorkbook“ Modul ein:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       Sheets("Nutzer-Protokoll").Visible = True
       With Sheets("Nutzer-Protokoll")
           .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = Environ("Username")
           .Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Date
           .Cells(.Cells(Rows.Count, 3).End(xlUp).Row + 1, 3).Value = Time
       End With
       Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
    End Sub
  3. Füge den folgenden Code ebenfalls in das „ThisWorkbook“ Modul ein, um den Protokoll-Sichtbarkeit zu steuern:

    Private Sub Workbook_Open()
       If Environ("Username") <> "Eckstein" Then
           Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
       Else
           Sheets("Nutzer-Protokoll").Visible = True
       End If
    End Sub
  4. Um das letzte Speicher-Datum anzuzeigen, erstelle eine Funktion:

    Public Function Speicherdatum()
       Application.Volatile
       Speicherdatum = ThisWorkbook.BuiltinDocumentProperties("last save time") & " von " & Application.UserName
    End Function
  5. Rufe diese Funktion in einer Zelle auf, um das Datum anzuzeigen: =Speicherdatum()


Häufige Fehler und Lösungen

  • Fehler: Das Protokoll wird nicht aktualisiert.

    • Lösung: Stelle sicher, dass der Code im richtigen Modul platziert ist und dass die Sichtbarkeit der „Nutzer-Protokoll“ korrekt gesetzt ist.
  • Fehler: Der Code wird nicht beim Speichern ausgeführt.

    • Lösung: Überprüfe, ob die Makros in deiner Excel-Datei aktiviert sind. Gehe zu Datei -> Optionen -> Trust-Center -> Einstellungen für das Trust-Center -> Makroeinstellungen.
  • Fehler: Das Datum wird nicht korrekt angezeigt.

    • Lösung: Füge Application.Volatile zur Speicherdatum()-Funktion hinzu, um sicherzustellen, dass die Formel aktualisiert wird.

Alternative Methoden

Eine Alternative zur Verwendung von VBA ist die Nutzung von Excel-Funktionen zur Protokollierung. Du kannst eine einfache Tabelle erstellen, in der die Benutzer manuell ihren Namen und das Datum eintragen. Allerdings bietet dies nicht die gleiche Automatisierung wie VBA.


Praktische Beispiele

Hier sind einige Beispiele, wie du den Code anpassen kannst:

  1. Mehrere Benutzer im Protokoll anzeigen: Ändere den Workbook_Open Code, um mehrere Benutzer zuzulassen:

    Private Sub Workbook_Open()
       Select Case LCase(Environ("Username"))
           Case "eckstein", "mueller", "weber"
               Sheets("Nutzer-Protokoll").Visible = True
           Case Else
               Sheets("Nutzer-Protokoll").Visible = xlVeryHidden
       End Select
    End Sub
  2. Automatisches Aktualisieren der Speicherdatum-Funktion: Füge die Zeile Application.Calculate in den Workbook_AfterSave Event ein, um sicherzustellen, dass die Zelle mit dem Datum aktualisiert wird:

    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
       Application.Calculate
    End Sub

Tipps für Profis

  • Stelle sicher, dass deine VBA-Codes gut strukturiert und dokumentiert sind, damit du später leichter Änderungen vornehmen kannst.
  • Nutze das Application.Volatile-Kommando, um sicherzustellen, dass deine Funktionen immer aktuell sind, ohne dass Werte manuell geändert werden müssen.
  • Überlege, ob du die Benutzerinteraktion mit der Datei weiter einschränken möchtest, indem du die Sichtbarkeit von Blättern gezielt steuerst.

FAQ: Häufige Fragen

1. Wie kann ich mehrere User zum Anzeigen des Protokolls in den VBA-Code eintragen? Du kannst den Select Case Befehl verwenden, um mehrere Benutzernamen zuzulassen. Füge einfach die Namen in die Case-Anweisung ein.

2. Warum wird das Speicherdatum nicht aktualisiert? Überprüfe, ob die Formel korrekt in einer Zelle eingegeben ist und ob Application.Volatile in deiner Funktion enthalten ist, um die Aktualisierung zu gewährleisten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige