Aangeven dat een bestand al is geopend en door wie?

Status
Niet open voor verdere reacties.
Begin met de codetags te gebruiken in dit forum....
 
Bij het maken van een post kun je programmacode in codetags zetten.
Het wordt dan getoond in een niet proportioneel lettertype en de inspringpunten blijven intact waardoor de leesbaarheid gewaarborgd is.
 
Code:
'// Just change the file to test here
Const strFileToOpen As String = "C:\Data.xls"

    If IsFileOpen(strFileToOpen) Then
        MsgBox strFileToOpen & " geopend " & _
            vbCrLf & "door " & LastUser(strFileToOpen), vbInformation, "Bestand in gebruik"
        Exit Sub
    Else
    
    End If


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



Als iemand met de Macro een bestandje opent, wil ik graag dat hij aangeeft of het bestand al door iemand anders in gebruik is en door wie. Ik gebruik daarvoor bovenstaande.
Ik heb dit ergens van Ivan Moala overgenomen en dit werkt prima voor de xls-files.
Nu ben ik alles aan het overzetten naar de 2010 versie van excel dus worden het xlsx-files. Maar nu loopt mijn Macro hierop vast.

Dus: Data.xls gaat wel en Data.xlsx gaat niet


Heeft iemand enig idee hoe ik dit moet aanpassen om hem ook voor xlsx file te laten werken?

Bvd. Joop
 
Bij het maken van een post kun je programmacode in codetags zetten.
Het wordt dan getoond in een niet proportioneel lettertype en de inspringpunten blijven intact waardoor de leesbaarheid gewaarborgd is.
Ik heb het aangepast. Is dit de bedoeling?
 
Perfect :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan