Excel VBA: Beim Verändern einer Zelle - Office Benutzer abfragen

  • Excel

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel VBA: Beim Verändern einer Zelle - Office Benutzer abfragen

    Hallo Zusammen,
    ich hätte eine Frage ist es irgendwie möglich, dass wenn man eine Zelle im Tabellenblatt verändert, bevor oder während der Veränderung eine Benutzerabfrage stattfindet?
    Es ist folgendermaßen geplant:
    In den Zellen, die bearbeitet werden, muss man das aktuelle Datum und ein gültiges Handzeichen eintragen, das wird über Datenüberprüfung abgefragt. Gültig heißt: es ist dieses Handzeichen hinterlegt und das Handzeichen soll nun auch über den aktuellen Benutzer abgefragt werden. Damit Max Mustermann nicht Heike Mustermann unterschreiben kann.

    Ich habe einen Sub angelegt, die mir den Office Benutzer ermittelt:

    Visual Basic-Quellcode

    1. Sub ActivateUser()
    2. Range("B3").Value = Application.UserName
    3. End Sub​


    Wenn ich jetzt zum Beispiel irgendeine Zelle beschriften will, werden die Zellen nach der Bearbeitung mittels VBA gesperrt:

    Visual Basic-Quellcode

    1. ​Sub Worksheet_Change(ByVal Target As Range)
    2. Me.Unprotect "Lok"
    3. Range("H1").Interior.ColorIndex = 9
    4. Target.MergeArea.Locked = True
    5. Me.Protect "Lok"
    6. End Sub


    Kann man das kombinieren? Wenn eine Zelle beschriftet wird, soll schon beim Selektieren jeder Zelle eine Aktualisierung des Benutzers bei der Zelle B3 stattfinden. Das hat den Hintergrund, weil mehrere User auf die Datei gleichzeitig zugreifen können.
    Ich hoffe ich habe es einigermaßen erklären können, wenn es eine bessere Lösung gibt - ich bin für alles offen :)

    Vielen Dank im Voraus

    petaod schrieb:

    Excel kann ein Workbook nur einem Benutzer schreibend zur Verfügung stellen.
    Der Rest kann nur ReadOnly darauf zugreifen.

    Also das funktioniert schon mal über einen Server, dass da alle was beschreiben können. Bisher sind wir daran nicht gescheitert.
    Die Frage ist, ob man beim Selektieren einer beliebigen Zelle, ein Auslösen von

    Visual Basic-Quellcode

    1. ​Sub ActivateUser()
    2. Range("B3").Value = Application.UserName
    3. End Sub

    herbeirufen kann...

    SZR2D schrieb:

    beim Selektieren einer beliebigen Zelle
    kannst du mit dem SelctionChange-Ereignis abfangen.

    Trotzdem verstehe ich die Notwendigkleit nicht.
    Der Username wird sich während der gesamten Session nicht verändern.
    Oder wie arbeitet ihr mit mehreren Benutzern an derselben Datei?
    Verwendet ihr co-authoring in der Azure-Cloud?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Der Sub "Activate User" schreibt mir ja nur in eine Zelle, welcher Benutzer gerade angemeldet ist.

    z.B.
    Max Mustermann will im Moment etwas in einer Zelle verändern.
    Max Mustermann ist in einem separaten Blatt mit einem Hdz. "MM" hinterlegt.
    Wenn der Max eine Zelle auswählt soll in "B3" Max Mustermann stehen, weil er auch unter dem Namen im Office angemeldet ist.
    Per Sverweis wird in der Telle B4 dem Max Mustermann das Hdz: "MM" zugewiesen
    Jede Zelle hat nun eine Datenüberprüfung darauf, dass der Inhalt mit der Zelle "B4" übereinstimmen muss
    D.h. nun hat der Max Mustemnann nur eine Möglichkeit und zwar sein Handzeichen einzugeben.

    SZR2D schrieb:

    das funktioniert schon mal über einen Server
    Ich habe zwar immer noch keine Ahnung, wie ihr gleichzeitig im selben Sheet arbeitet, aber deine Anforderung kann abgedeckt werden, wenn du das SelectionChange Event das integrierst

    Visual Basic-Quellcode

    1. ​Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. Dim Username As String
    3. Username = Environ("USERNAME") 'alternativ Application.Username
    4. If Range("B3").Value <> Username Then Range("B3").Value = Username
    5. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Zuerst einmal eine Frage, wo wird die Datei bearbeitet, bzw. wo liegt die Datei.
    Wenn sie in Excel-Online oder vom Sharepoint aus geöffnet wird, können immer mehrere User zeitgleich in der Datei arbeiten, ohne das man was einstellen muss.
    Bei einer Datei vom Fileserver, kann man schon mindestens seit Office 2000 die Bearbeitung für mehrere Nutzer freigeben.

    Was das mit dem Handzeichen und der Unterschrift sein soll habe ich noch nicht so ganz verstanden.

    Geht es um das Abzeichen der ganzen Datei oder nur eines Datensatzes?

    Für ersteres schlage ich ein ganz anderes Vorgehen vor. Die Datei digital unterschreiben, dann ist Sie auch automatisch gesperrt.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Jep, die Datei liegt auf dem Sharepoint und gleichzeitiges Bearbeiten ist überhaupt nicht das Problem.


    INOPIAE schrieb:

    Was das mit dem Handzeichen und der Unterschrift sein soll habe ich noch nicht so ganz verstanden.

    Zum besseren Verständnis erkläre ich mal, wie der Stand aktuell ist.
    1. Wenn jemand die Mappe öffnet, wird automatisch "Sub Activate User" ausgelöst. Dann steht in einer festgelegten(Zum Beispiel - Tabellenblatt "FP", Zelle "B3") Zelle "Max Mustermann"
    2. In einem separaten (ausgeblendetem) Tabellenblatt "HDZ" wird dieser Wert mit einer "=" Formel in die Zelle "A1" übernommen
    3. In der "B2" wird über den Sverweis, das hinterlegte Handzeichen dafür übernommen. Z.B. "MM"
    4. In den Zellen "C1" bis "E1" wird mit einem Sverweis ermittelt welche Freigaben dieser Mitarbeiter hat. Hat er eine Freigabe als Steuerer, Werker oder Vorgesetzter wird dann jeweils mit "Wahr" vorgegeben.
    5. Wenn der MA die Freigabe als Steuerer hat, steht in der Zelle A2 - das heutige Datum und das Handzeichen - ansonsten "0"
    - Wenn der MA die Freigabe als Werker hat, steht in der Zelle B2 - das heutige Datum und das Handzeichen - ansonsten "0"
    - Wenn der MA die Freigabe als Vorgesetzter hat, steht in der Zelle C2 - das heutige Datum und das Handzeichen - ansonsten "0"
    6. In der Auftragsdoku sind nun, nur die Zellen zum Beschriften verfügbar, wo etwas eingetragen werden muss. Die Felder mit Datum/ HDZ
    greifen über eine Datenüberprüfung auf jeweilige Zelle im Tabellenblatt "HDZ" zu. Das funktioniert soweit auch gut, es ist immer nur das heutige Datum möglich und ein Werker kann nur da unterschreiben, wo er eine Berechtigung hat.

    Ich will jetzt, dass ein Werker Max nur mit seinem Handzeichen unterschreiben kann und nicht für den Werker Tom. Das funktioniert auch gut.
    Aber wenn jetzt der Vorgesetzte von seinem PC aus, die Datei über den Sharepoint öffnet, dann steht beim Punkt 1 (Tabellenblatt "FP", Zelle "B3") sein Name und das wird überall übernommen und die Datenprüfung greift dann nur auf sein Handzeichen zu.

    Das versuche ich zu verhindern, indem ich der Mappe vorgebe, dass der Benutzer immer aktualisiert wird, wenn jemand eine Zelle auswählt.

    petaod schrieb:

    Und - Hast du meinen Ansatz versucht?

    Ja, jetzt gerade eben. Funktioniert einwandfrei, Vielen Dank!
    Könntest mir evtl. noch hier etwas verändern, weil ich eben ein Noob in VBA bin :rolleyes:
    Das Ganze war ja zum Testzweck und funktioniert, wie es sollte. Aber kann man noch irgendwie angeben, dass es immer im Tabellenblatt "FP CopyPaste" verändert wird unabhängig davon in welchem Tabellenblatt ich mich aufhalte

    Visual Basic-Quellcode

    1. If Range("B3").Value <> Username Then Range("B3").Value = Username

    Visual Basic-Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. Dim Username As String, UsernameCell As Range
    3. Username = Environ("USERNAME") 'alternativ Application.Username
    4. Set UsernameCell = Sheets("FP CopyPaste").Range("B3")
    5. If UsernameCell.Value <> Username Then UsernameCell.Value = Username
    6. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --