Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei geöffnet von wem

Datei geöffnet von wem
wem
Hallo liebe Experten,
laut Google scheint die Frage öfter aufzutauchen, Lösung dazu habe ich leider keine gefunden.
Ich möchte per Macro abfragen ob eine Datei bereits von einem anderen User geöffnet ist. Falls ja, dann sollte mir das Macro den Namen des Users anzeigen, so dass ich Ihn kontaktieren kann.
Für den ersten Teil habe ich bereits Lösungen gefunden - beim zweiten teil stehe ich aber noch auf dem Schlauch:
Public Function IsFileOpen(ByRef Path As String) As Boolean
Dim FileNr As Integer
Dim ErrorNr As Long
'open file for testing
On Error Resume Next
FileNr = FreeFile
Open Path For Input Lock Write As #FileNr
ErrorNr = Err.Number
Close #FileNr
On Error GoTo 0
If ErrorNr  0 Then
IsFileOpen = True
End If
Err.Clear
End Function

Public Sub CheckIfOpen()
Dim BlockUser As String
If IsFileOpen("L:\Test\test.xls") = True Then
'hier fehlt mir die Ermittlung des users
MsgBox ("Die Datei wird von User " & BlockUser & " blockiert!")
End If
End Sub
Vielen Dank für Eure Hilfe
Gruss
Theo
P.S Das "Public" vor dem Sub habe ich nur eingfügt dass mir die Forumssoftware das Sub auch als Makro formatiert.

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

Betreff
Benutzer
Anzeige
AW: Datei geöffnet von wem
22.03.2011 18:23:12
wem
Hallo,
wir auch. Für die Vorgängerversionen gabs mal eine äußerst komplizierte Lösung. Seit Excel 2007 gibt es bisher nichts.
Gruß
Nepumuk
AW: Datei geöffnet von wem
22.03.2011 23:05:43
wem
Hallo Theo,
habe folgende Quelle anzubieten : http://www.xcelfiles.com/IsFileOpen.html
Problem : Funktioniert nicht bei passwortgeschützten Dateien.
P.S Das "Private" bei
  • Sub TestVBA()
  • und bei
  • Function IsFileOpen(strFullPathFileName As String) As Boolean
  • habe ich ebenfalls nur eingfügt damit die Forumssoftware das Sub auch als Makro formatiert. Muss/Kann daher gelöscht werden.
    Gruß
    Mexsalem
    Option Explicit
    Private Sub TestVBA()
    'http://www.xcelfiles.com/IsFileOpenVBA.htm
    '// Just change the file to test here
    Const strFileToOpen As String = "C:\Data.xls"
    If IsFileOpen(strFileToOpen) Then
    MsgBox strFileToOpen & " is already Open" & _
    vbCrLf & "By " & LastUser(strFileToOpen), vbInformation, "File in Use"
    Else
    MsgBox strFileToOpen & " is not open", vbInformation
    End If
    End Sub
    

    Private 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
    

    Private 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
    

    Anzeige
    AW: Datei geöffnet von wem
    23.03.2011 11:22:00
    wem
    Hallo Mexsalem,
    super, das funzt einwandfrei!!
    Danke und Gruss
    Theo

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige