ich in einer Arbeitsmappe geöffnet Ereignis den folgenden VBA-Code verwende:VBA Automatisches Speichern der Arbeitsmappe alle 10 Sekunden, ohne die Arbeitsmappe zu aktivieren?
Private Sub Workbook_Open()
On Error GoTo Message
Application.AskToUpdateLinks = False
ThisWorkbook.UpdateLinks = xlUpdateLinksNever
ActiveSheet.DisplayPageBreaks = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim currentTime As Date
currentTime = DateAdd("s", 10, Now)
Call CurUserNames
Application.OnTime currentTime, "SaveFile"
Exit Sub
Message:
Application.DisplayAlerts = False
Exit Sub
End Sub
ich diesen Code auch in einem Modul haben:
Public Sub SaveFile()
On Error GoTo Message
ThisWorkbook.Save
Dim currentTime As Date
currentTime = DateAdd("s", 10, Now)
Application.OnTime currentTime, "SaveFile"
Exit Sub
Message:
Application.DisplayAlerts = False
Exit Sub
End Sub
Was jeder meiner Arbeitsmappe zu tun Ich versuche, automatisch speichern ist 10 Sekunden.
Das funktioniert.
Aber etwas ziemlich ärgerlich ist mir aufgefallen. Wenn ein Benutzer diese Arbeitsmappe im Hintergrund geöffnet hat und an einer anderen Excel-Arbeitsmappe arbeitet, wird diese Arbeitsmappe beim Speichern aktiviert und über der anderen Arbeitsmappe angezeigt.
Dies kann für den Benutzer ziemlich ärgerlich sein. Gibt es eine Möglichkeit, meine Arbeitsmappe zu speichern, ohne die Arbeitsmappe zu aktivieren?
S.S. Aus einem unbekannten Grund verursacht dies auch, dass die Arbeitsmappe erneut geöffnet wird, wenn sie geschlossen wurde.
EDIT:
Liste aktive Benutzer in Arbeitsmappe Code:
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
10 Sekunden ist unglaublich häufig, warum nicht eine Bedingung hinzufügen, um zu sehen, ob die Arbeitsmappe tatsächlich * aktiv * ist, und überspringt das Speichern sonst? Wenn die Arbeitsmappe geändert wird, ist sie aktiv und wird alle 10 Sekunden gespeichert. Aus Interesse, warum so erstaunlich häufig? – Wolfie
@Wolfie Ich brauche es, um häufig zu sein, weil Benutzer auf die Arbeitsmappe zugreifen können, weil es freigegeben ist, und in einer Zelle listet ich alle aktiven Benutzer auf. Dies wird jedoch nur aktualisiert, wenn die Arbeitsmappe häufig gespeichert wird. – user7415328
Re: Unknown Grund: Wenn Sie den Zeitplan 'OnTime' nicht löschen, wenn das Ereignis' Workbook_Close' ausgelöst wird, wird es erneut geöffnet, um den Zeitplan fortzusetzen. Es gibt Hunderte von Beispielen dafür. Anstatt die Datei alle 10 Sekunden blind zu speichern, testen Sie auch, ob sich zuerst alles geändert hat und ob es gespeichert wurde. 'ThisWorkbook.Saved' wird auf' False' gesetzt, wenn sich die Datei geändert hat. – CLR