Ich verwende die folgenden Makro, um alle aktiven Benutzer in einer aktiven Arbeitsmappe zur Zeit zu erhalten und in der Liste:VBA erhalten aktive Benutzer von freigegebenen Workbokook, Liste mit Komma und Auto-Update-Zelle?
Sub CurUserNames()
Dim str As String
Dim Val1 As String
str = "Users currently online:" & Chr(10)
For i = 1 To UBound(ThisWorkbook.UserStatus)
str = str & ThisWorkbook.UserStatus(i, 1) & ", "
Next
Val1 = DeDupeString(Mid(str, 1, Len(str) - 2))
Worksheets("Delivery Tracking").Range("F4").Value = Val1
End Sub
Function DeDupeString(ByVal sInput As String, Optional ByVal sDelimiter As String = ",") As String
Dim varSection As Variant
Dim sTemp As String
For Each varSection In Split(sInput, sDelimiter)
If InStr(1, sDelimiter & sTemp & sDelimiter, sDelimiter & varSection & sDelimiter, vbTextCompare) = 0 Then
sTemp = sTemp & sDelimiter & varSection
End If
Next varSection
DeDupeString = Mid(sTemp, Len(sDelimiter) + 1)
End Function
ich diesen Code leite auf Arbeitsmappe geöffnet und Arbeitsmappe vor dem Schließen.
Auf Arbeitsmappe geöffnet
Private Sub Workbook_Open()
On Error GoTo Message:
Application.DisplayAlerts = False
Worksheets(1).Activate
Worksheets(1).Rows("6:6").Select
ActiveWindow.FreezePanes = True
Call CurUserNames
Range("F4").Calculate
ThisWorkbook.Save
Application.Calculation = xlManual
Application.CalculateBeforeSave = False
Application.DisplayAlerts = True
Exit Sub
Message:
Application.DisplayAlerts = False
Exit Sub
End Sub
Vor Schließen
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo Message:
Application.DisplayAlerts = False
Call CurUserNames
Range("F4").Calculate
ThisWorkbook.Save
Application.DisplayAlerts = True
Exit Sub
Message:
Application.DisplayAlerts = False
Exit Sub
End Sub
Ich möchte zwei Dinge erreichen.
Ich möchte meine Zelle F4 automatisch mit allen Benutzern aktualisieren, die derzeit in der Arbeitsmappe an-/abgemeldet sind. Ich möchte, dass dies in Echtzeit geschieht, ohne dass meine Tabelle verlangsamt wird. Im Idealfall bedeutet dies, dass bei Änderungen des Arbeitsblattwechsels nicht ständig ein neues Ereignis auftritt, das ständig überprüft wird.
Im Moment kann der Benutzer das Zellenupdate nur sehen, wenn sie speichern drücken.
Bitte kann jemand mir einen besseren Weg zeigen, dies zu tun, damit es tut, was ich brauche?
bearbeiten 3:
Auch, wie kann ich den Code ändern, bestimmte Benutzer-Namen zu finden,
dh Mark Smith oder Katherine Jones in der Kette und beide Vorkommen dieser Namen zu ändern, um ein Vorkommen von Administrator etwa so:
Mark Smith, Katherine Jones, Linda Harper, John Doe
zu
Administrator, Linda Harper, John Doe
Ich würde mich über die Hilfe sehr freuen. Dank
Der Code vorgeschlagen von @ User3598756 zeigt noch wie folgt aus:
Administrator, Administrator, Linda Harfner, John tut
Das ist falsch
für das lat Problem verwenden 'Val1 = Ersetzen (Val1," Mark Smith "," Administrator ")' – user3598756
@ user3598756 Danke, das ist großartig, aber wissen Sie, ob ich zwei Namen ersetzen kann? Mark Smith oder Katherine Jones und haben beide ein Display als Hauptbüro, wenn sie beide eingeloggt sind? Siehe Bearbeiten in Frage – user7415328
fügen Sie eine weitere Aussage hinzu: 'Val1 = Ersetzen (Val1," Katherine Jones "," Administrator ")'. – user3598756