Kann man den Benutzernamen in einem UserForm Label angeben, der das Dokument geöffnet hat?

Hi, ich liebe Herausforderungen und komme auch nach und nach weiter. Nun habe ich diese Funktion welche prüft, ob eine bestimmte Datei geöffnet ist:

Public Function IsFileOpen(FileName As String)
    Dim filenum As Integer, errnum As Integer
    On Error Resume Next
    filenum = FreeFile()
    Open FileName For Input Lock Read As #filenum
    Close filenum
    errnum = Err
    On Error GoTo 0
    Select Case errnum
    Case 0
    IsFileOpen = False
    Case 70
    IsFileOpen = True
    Case Else
    Error errnum
    End Select
End Function

Mit dieser Funktion kann ich arbeiten, wenn das Dokument von wem auch immer geöffnet ist, öffnet sich eine UserForm.

Nun möchte ich gerne mit dieser Funktion ermitteln, welcher Benutzer das Dokument geöffnet hat:

Public 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)
   
    #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

Aber das klappt nicht...

Ich habe es mit diesem Code probiert und diesen an meinen Pfad und das Dokument angepasst:

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

Bekomme immer Fehler 52.

Ich würde aber gerne den Benutzernamen auch später in der UserForm (anstatt einer MsgBox) im Label anzeigen, was ich ebenfalls nicht hinbekomme.

Weiß jemand, wie ich den Benutzernamen ermittel, der das Dokument geöffnet hat und ich diesen dann in den Label-Text einbauen kann? Oder geht das nicht?

Vielen herzlichen Dank im Voraus.

Excel, VBA, VBA Excel
Welche Alternative nutze ich für As Variant?

Hallo,

ich habe eine Excel-Tabelle mit VBA Code. In meinem Fall handelt habe ich in der Überschriften-Zeile der Überschrift jeweils einen Namen gegeben. Nach diesem Namen suche ich nun und die ermittelte Spaltennummer wird dann im Code verwendet.

Das funktioniert aber offensichtlich nur bis 20 dims, dann muss ich die Spaltennummer manuell eingeben. Das ist insofern doof, weil die Tabelle dynamisch ist und sich die Nummer ändern könnte, wenn neue Spalten eingefügt werden.

Hier ein Beispiel über die dims

mkurz As Variant, mlang As Variant, zuständig As Variant, entsch As Variant, _
    entscheider As Variant, wirksam As Variant, start As Variant, weitere As String, abschlussd

Hier werden sie verwendet:

    doc.Bookmarks("entscheider").Range.Text = Tabelle1.Cells(Zeile, entscheider).Value
    doc.Bookmarks("wirksam").Range.Text = Tabelle1.Cells(Zeile, wirksam).Value
    doc.Bookmarks("start").Range.Text = Tabelle1.Cells(Zeile, start).Value
    doc.Bookmarks("weitere").Range.Text = Tabelle1.Cells(Zeile, 21).Value
    doc.Bookmarks("abschlussd").Range.Text = Tabelle1.Cells(Zeile, 25).Value

Ich wurde die Spaltennummern nun gerne wieder durch den spezifizierten Namen der Zelle ersetzen...

Geht das oder ist das eben das Limit mit 20 Namen bei As Variant?

EDIT: Ich glaube das mit den 20 stimmt nicht, er hört jedenfalls irgendwann auf zu zählen, ggf. wurden schon zu viele Namen (Dim) vergeben?

Computer, Excel, VBA
Kann Excel das ohne VBA?

Guten Tag liebes Forum,

Vorab sei gesagt, dass ich aufgrund von dienstlichen Vorgaben keine Screenshots meiner Arbeitsmappe anhängen kann. Ich hoffe, dass der Ein oder Andere mir dennoch helfen kann.

Folgender Sachverhalt:
Meine Excel-Arbeitsmappe enthält zwei Arbeitsblätter:
- "Bezüge" (dieses wird als Datenbank genutzt, um das Hauptblatt sauber zu halten)
- "Anwesenheit"

Im Blatt "Bezüge" sind in den Zellen F2:DW2 Wochentage (abgekürzt) aufgelistet. In den Zellen F3:DW3 das dazugehörige Datum.

Samstage sowie Sonntage sind durch bedingte Formatierung "grau" hinterlegt.

Im Blatt "Anwesenheit" stehen ganz viele Namen untereinander und oben drüber von links nach recht die Wochentage sowie in einer Zelle darunter das jeweilige Datum. Quasi identisch mit "Bezüge"

Auch hier ist das Färben der Samstage sowie Sonntage keine große Problematik, wenn bedingte Formatierung genutzt wird. Allerdings steh ich ein wenig auf dem Schlauch, wenn es darum geht das zugehörige Datum zum Wochentag in identischer Farbe (wie die bedingte Formatierung den Wochentag) darzustellen.

Zusätzlich sei gesagt, dass alle Wochentage und Datum-Angaben im Blatt "Anwesenheit" mit "=WENN" bzw. "=WENN(UND"- Formeln erzeugt werden und sich entsprechend auf "Bezüge" beziehen.

Gibt es hierfür eine eigene Formel oder eine Möglichkeit vorhandene Formeln in der Zielzelle zu ergänzen?

Grundsätzlich wäre auch eine VBA-Lösung annehmbar. ich bin zwar Neueinsteiger aber mit 30/40 Zeilen VBA sollte ich irgendwie zurecht kommen.

Ganz ganz lieben Dank und beste Grüße.

Excel, VBA

Meistgelesene Fragen zum Thema Excel