Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1564to1568
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

Benutzernamen von bereits geöffneter Datei auslese

Benutzernamen von bereits geöffneter Datei auslese
20.06.2017 11:48:17
bereits
Hallo Zusammen,
mir stellt sich gerade folgendes Problem:
Aus einer freigegebenen Arbeitsmappe heraus werden in eine andere Mappe Daten verschoben. Ist die Mappe, in die verschoben werden soll, jedoch von jemand anderem geöffnet, dann wird sie logischerweise nur im Lesemodus geöffnet und die Daten können nicht eingetragen werden.
Zwar habe ich das mittlerweile hinbekommen, dass eine Fehlermeldung kommt, wenn sich die Mappe im Lesemodus befindet und der Vorgang auch abgebrochen wird, allerdings komme ich einfach nicht an den Namen desjenigen heran, der die Mappe im beschreibbaren Modus geöffnet hat. Wie bitte mache ich das?
Mein Code sieht bisher so aus:

Set wkb = ThisWorkbook              'Workbooks(wkb)
sFile = "Auswertung Artikelliste.xlsm"
AusW = ThisWorkbook.Path & "\" & sFile
If WkbExists(sFile) = False Then
If Dir(AusW) = "" Then
MsgBox "Datei " & AusW & " wurde nicht gefunden!"
Exit Sub
Else
Workbooks.Open AusW
Workbooks(sFile).Activate
user1 = Workbooks(sFile).WriteReservedBy
If ActiveWorkbook.ReadOnly = True Then
MsgBox "Die Mappe 'Auswertung Artikelliste' ist von " & user1 & " geöffnet." & Chr( _
10) & _
"Ein Übertrag ist daher nicht möglich." & Chr(10) & _
"Der Vorgang wird abgebrochen.", vbOKOnly, "Achtung!"
Unload UserForm1
Exit Sub
End If
End If
Else
Workbooks(sFile).Activate
user1 = Workbooks(sFile).WriteReservedBy
If ActiveWorkbook.ReadOnly = True Then
MsgBox "Die Mappe 'Auswertung Artikelliste' ist von " & user1 & " geöffnet." & Chr( _
10) & _
"Ein Übertrag ist daher nicht möglich." & Chr(10) & _
"Der Vorgang wird abgebrochen.", vbOKOnly, "Achtung!"
Unload UserForm1
Exit Sub
End If
End If

Da die freigegebene Arbeitsmappe natürlich von mehreren Kollegen benutzt wird, wäre es daher mehr als hilfreich zu wissen, wer die andere Mappe ursprünglich geöffnet hat.
Vielen Dank schon mal für eure Hilfe.
Gruß Oisse

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 12:32:04
geöffneter
Hallo,
teste mal
Option Explicit
Sub TestMakro()
Dim strFile As String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = "*"
.Title = "Datei prüfen"
If .Show = -1 Then
strFile = .SelectedItems(1)
Pruefen strFile
End If
End With
End Sub
Private 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ß
Rudi
Anzeige
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 13:16:16
geöffneter
Hallo Rudi und besten Dank für deinen Code.
Ich habe ihn in ein Modul kopiert und durchlaufen lassen.
Wenn ich dann die entsprechende Mappe auswähle kommt die Meldung:
"Auswertung Artikelliste.xlsm ist von"
und dann kommen lauter unverständliche Zeichen.
Muss ich bei der Funktion LastUser noch was verändern?
Kann so nicht erkennen, was das wäre.
Gruß Oisse
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 17:39:33
geöffneter
Hallo,
ich weiss zwar nicht, wie dein Problem zu lösen ist, aber die Funktion LastUser isses wohl nicht. Jedenfalls nicht so.
Das Ding liest die ganze Datei in eine Zeichenfolge und sucht dann nach zwei Blanks, die das Ende eines Namens markieren sollen ? Und was ist mit den ganzen anderen Blanks die zufälligerweise in dem Ding rumschwirren?
Daneben sind noch ein paar andere ungereimtheiten in dem Code. Vergiß das Ding.
Wenn du wissen willst, wer auf deiner Datei sitzt, dann such nach einer entsprechenden API-Funktion.
vg, MM
Anzeige
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 18:18:20
geöffneter
Danke für die Antwort
Und wenn ich es mit ActiveWorkbook.BuiltinDocumentProperties(7) probiere?
Mit Index 7 wird der letzte Autor angezeigt.
Kann das momentan leider nicht testen, weil ich keine zweite Person vor Ort habe, die die Mappe mal öffnen könnte um zu sehen, ob´s damit funktioniert. (Der Autor wird angezeigt, das bin ich aber momentan eben alleine).
Gruß Oisse
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 18:25:04
geöffneter
Also, grundsätzlich kann der sich ja nur verewigen, wenn er mal auf speichern drückt. Ansonsten bleibt die Datei, die er/sie/es gerade sperrt vollkommen unverändert.
Habe zumindest ein Beispiel gefunden und weiter unten drangeklemmt, wie man gucken kann, ob die Datei überhaupt gesperrt ist. Ansonsten verrät Excel ja den Schuldigen, wenn man die Zieldatei manuell öffnet.
Anzeige
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 18:20:50
geöffneter
Es geht auch ohne API-Funktion:
Option Explicit
Public Function IsFileLocked(PathName As String) As Boolean
On Error GoTo ErrHandler
Dim i As Integer
If Dir(PathName, vbNormal)  "" Then
i = FreeFile()
Open PathName For Random Access Read Write Lock Read Write As #i
Lock i 'Redundant but let's be 100% sure
Unlock i
Close i
Else
Err.Raise 53
End If
ExitProc:
On Error GoTo 0
Exit Function
ErrHandler:
Select Case Err.Number
Case 70 'Unable to acquire exclusive lock
IsFileLocked = True
Case Else
MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
End Select
Resume ExitProc
End Function
Sub guckste()
MsgBox IsFileLocked("D:\A\tess.zip")
End Sub
Da weiss man zwar immer noch nicht, wer das ist, aber immerhin kann man die Notbremse ziehen.
Anzeige
AW: Benutzernamen von geöffneter Datei auslese
20.06.2017 20:26:22
geöffneter
Dankeschön, auch für die Info mit dem Speichern.
Vielleicht liegt da ja schon ein gewisser Schlüssel. Wenn bei demjenigen, nachdem per VBA was in der Auswertung gemacht hat, gleich auch per Makro gespeichert wird, ist der Name ja vorhanden.
Ich werde das mal testen, bin aber jetzt eine Woche weg. Deswegen kann ich dann erst berichten.
Herzliche Grüße
Oisse
AW: Benutzernamen von geöffneter Datei auslese
21.06.2017 07:40:18
geöffneter
Hallo Ossi,
warum Offen? Soll jemand vorbei kommen?
Du willst doch testen. In einer Woche ist der Beitrag raus.

22 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige