Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: wer hat die Datei geöffnet

wer hat die Datei geöffnet
28.01.2013 21:49:10
Nico
Hallo zusammen,
gibt es unter Excel 2007 per VBA eine Möglichkeit herauszufinden, welcher User (Username) das Workbook gerade geöffnet hat oder zumindest ob es schon von einer anderen Person geöffnet wurde und somit nicht mehr bearbeitet werden kann.
Diese Information würde ich nämlich gerne abfangen und gleich beim Öffnen der Datei(.xlsm) dem User mitteilen. Der Code soll natürlich in der Datei stehen, um die es auch geht und nicht in einer anderen Excel-Datei.
Vielen Dank für Eure Vorschläge
VG,Nico

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: wer hat die Datei geöffnet
28.01.2013 22:59:35
Uduuh
Hallo,
Option Explicit
Sub TestMakro()
Dim strFile As String
strFile = "c:\test.xls"
Pruefen strFile
MsgBox "OK"
End Sub

Sub Pruefen(strFileToOpen As String)
Do While IsFileOpen(strFileToOpen)
If MsgBox(strFileToOpen & " ist von " & LastUser(strFileToOpen) & " geöffnet." _
& vbLf & "Bitte schließen lassen.", _
vbOKCancel + vbInformation, "Datei geöffnet") = vbCancel Then End
Loop
End Sub
Function IsFileOpen(strFullPathFileName As String) As Boolean
'// VBA version to check if File is Open
'// We can use this for ANY FILE not just Excel!
'// Ivan F Moala
'// http://www.xcelfiles.com
Dim hdlFile As Long
'// Error is generated if you try
'// opening a File for ReadWrite lock >> MUST BE OPEN!
On Error GoTo FileIsOpen:
hdlFile = FreeFile
Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
IsFileOpen = False
Close hdlFile
Exit Function
FileIsOpen:
'// Someone has it open!
IsFileOpen = True
Close hdlFile
End Function
Function LastUser(strPath As String) As String
'// Code by Helen from http://www.
_
visualbasicforum.com/index.php?s=
'// This routine gets the Username of the File In Use
'// Credit goes to Helen for code & Mark for the idea
'// Insomniac for xl97 inStrRev
'// Amendment 25th June 2004 by IFM
'// : Name changes will show old setting
'// : you need to get the Len of the Name stored just before
'// : the double Padded Nullstrings
Dim strXl As String
Dim strFlag1 As String, strflag2 As String
Dim i As Integer, j As Integer
Dim hdlFile As Long
Dim lNameLen As Byte
strFlag1 = Chr(0) & Chr(0)
strflag2 = Chr(32) & Chr(32)
hdlFile = FreeFile
Open strPath For Binary As #hdlFile
strXl = Space(LOF(hdlFile))
Get 1, , strXl
Close #hdlFile
j = InStr(1, strXl, strflag2)
#If Not VBA6 Then
'// Xl97
For i = j - 1 To 1 Step -1
If Mid(strXl, i, 1) = Chr(0) Then Exit For
Next
i = i + 1
#Else
'// Xl2000+
i = InStrRev(strXl, strFlag1, j) + Len(strFlag1)
#End If
'// IFM
lNameLen = Asc(Mid(strXl, i - 3, 1))
LastUser = Mid(strXl, i, lNameLen)
End Function

Gruß aus’m Pott
Udo

Anzeige
AW: wer hat die Datei geöffnet
28.01.2013 23:21:22
Nico
Hallo Udo,
vielen Dank derweile. Schaut ja doch recht kompliziert aus, hätte gedacht, das geht irgendwie auch einfacher. Naja, werde den Spaß mal versuchen in meinem Code zu verbauen.
Gruß, Nico

AW: wer hat die Datei geöffnet
29.01.2013 08:40:52
eres
Hallo Uduuh,
kann es sein, dass die Function "LastUser" ab dem neuen Excel-Fileformat Excel 2007, 2010 nicht mehr funktioniert? Bei meinem Test funktioniert es jedenfalls nicht.
s. auch: http://www.mrexcel.com/forum/excel-questions/253403-lastuser.html
Gruß
erwin
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Sieh nach, wer die Excel-Datei geöffnet hat


Schritt-für-Schritt-Anleitung

Um herauszufinden, ob die Excel-Datei von jemand anderem geöffnet ist und um den Benutzernamen des aktuellen Nutzers zu ermitteln, kannst du VBA verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und erstelle ein neues Workbook oder öffne das bestehende, in dem du die Funktion einfügen möchtest.

  2. Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Rechtsklicke im Projekt-Explorer auf dein Workbook.
    • Wähle „Einfügen“ und dann „Modul“.
  4. Kopiere den folgenden VBA-Code in das Modul:

    Sub TestMakro()
        Dim strFile As String
        strFile = "C:\dein_pfad\deine_datei.xlsm"
        Pruefen strFile
        MsgBox "OK"
    End Sub
    
    Sub Pruefen(strFileToOpen As String)
        Do While IsFileOpen(strFileToOpen)
            If MsgBox(strFileToOpen & " ist von " & LastUser(strFileToOpen) & " geöffnet." _
            & vbLf & "Bitte schließen lassen.", vbOKCancel + vbInformation, "Datei geöffnet") = vbCancel Then End
        Loop
    End Sub
    
    Function IsFileOpen(strFullPathFileName As String) As Boolean
        Dim hdlFile As Long
        On Error GoTo FileIsOpen:
        hdlFile = FreeFile
        Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
        IsFileOpen = False
        Close hdlFile
        Exit Function
    FileIsOpen:
        IsFileOpen = True
        Close hdlFile
    End Function
    
    Function LastUser(strPath As String) As String
        Dim strXl As String
        Dim strFlag1 As String, strflag2 As String
        Dim i As Integer, j As Integer
        Dim hdlFile As Long
        Dim lNameLen As Byte
        strFlag1 = Chr(0) & Chr(0)
        strflag2 = Chr(32) & Chr(32)
        hdlFile = FreeFile
        Open strPath For Binary As #hdlFile
        strXl = Space(LOF(hdlFile))
        Get 1, , strXl
        Close #hdlFile
        j = InStr(1, strXl, strflag2)
        i = InStrRev(strXl, strFlag1, j) + Len(strFlag1)
        lNameLen = Asc(Mid(strXl, i - 3, 1))
        LastUser = Mid(strXl, i, lNameLen)
    End Function
  5. Ändere den Dateipfad in der Variable strFile, um auf die Datei zu verweisen, die du überprüfen möchtest.

  6. Führe das Makro aus, um zu sehen, ob die Datei geöffnet ist und von wem.


Häufige Fehler und Lösungen

  • Fehler: „Datei nicht gefunden“
    Überprüfe den angegebenen Pfad in strFile. Stelle sicher, dass die Datei existiert und der Pfad korrekt ist.

  • Fehler: „Der Vorgang konnte nicht abgeschlossen werden“
    Dies kann passieren, wenn die Datei von einer anderen Instanz von Excel geöffnet wurde. Schließe alle Excel-Instanzen und versuche es erneut.

  • Die Funktion „LastUser“ funktioniert nicht in Excel 2007
    Möglicherweise ist die Funktion nicht mit dem neuen Dateiformat kompatibel. In diesem Fall kannst du alternative Methoden in Betracht ziehen.


Alternative Methoden

Wenn VBA nicht die gewünschte Lösung bietet, kannst du auch die „Datei-Öffnen“-Option in Excel nutzen. Bei der Öffnung einer Datei zeigt Excel normalerweise an, ob sie bereits von einem anderen Benutzer geöffnet ist, insbesondere in einer Netzwerkumgebung. Dies ist eine einfache Möglichkeit, um zu sehen, wer die Excel-Datei geöffnet hat.


Praktische Beispiele

Ein Beispiel für die Verwendung des Codes könnte wie folgt aussehen:

  • Du möchtest wissen, ob die Datei „Bericht.xlsx“ von einem anderen Teammitglied geöffnet ist. Du würdest den Dateipfad in den Code ändern:

    strFile = "C:\Users\DeinName\Documents\Bericht.xlsx"
  • Bei der Ausführung des Makros wirst du eine Nachricht erhalten, die dir mitteilt, ob die Datei geöffnet ist und von wem.


Tipps für Profis

  • Verwende die Funktion „IsFileOpen“ in Kombination mit anderen VBA-Funktionen, um komplexere Automatisierungen zu erstellen, wie z.B. das automatische Schließen von Dateien.

  • Implementiere Error-Handling, um mögliche Fehler abzufangen und die Benutzerfreundlichkeit zu erhöhen.

  • Dokumentiere deinen Code, damit andere Benutzer verstehen, was jede Funktion macht, besonders in Teamprojekten.


FAQ: Häufige Fragen

1. Frage
Wie kann ich den Code anpassen, um mehrere Dateien zu überprüfen?
Antwort
Du kannst eine Schleife benutzen, um über ein Array von Dateipfaden zu iterieren und die Pruefen-Funktion für jede Datei aufzurufen.

2. Frage
Funktioniert dieser Code in Excel 2010 und 2013?
Antwort
Ja, der Code sollte auch in diesen Versionen funktionieren, solange du das richtige Dateiformat verwendest. Achte jedoch darauf, dass die Funktion „LastUser“ eventuell nicht immer die gewünschten Ergebnisse liefert.

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