我正在使用一個工作簿打開事件下面的VBA代碼:VBA自動每10秒鐘保存工作簿而不激活工作簿?
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
我也有這樣的代碼模塊中:
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
我所試圖做的是自動保存我的工作簿每10秒。
This Works。
但是,我注意到了一些令人討厭的事情。如果用戶在後臺打開此工作簿並正在處理另一個Excel工作簿,那麼此工作簿將在保存時激活並顯示在其他工作簿的頂部。
這對於用戶來說可能很煩人。 有沒有辦法讓我的工作簿在不激活工作簿的情況下保存?
P.S: 由於某些未知原因,這也會導致工作簿在關閉時重新打開。
編輯:
名單簿代碼活躍用戶:
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秒非常頻繁,爲什麼不添加一個條件來查看工作簿實際*是*活動,並跳過保存,否則?這樣,如果工作簿實際上發生了變化,它就會處於活動狀態,然後每隔10秒就會保存一次。出於興趣,爲什麼如此頻繁? – Wolfie
@Wolfie我需要它頻繁,因爲用戶可以訪問該工作簿,因爲它共享和單元格我列出所有活動用戶。但是,除非工作簿經常保存,否則不會更新 – user7415328
Re:未知原因:除非您在Workbook_Close事件觸發時清除「OnTime」事件計劃,否則它將重新打開以繼續計劃。有數百個如何做到這一點的例子。另外,不要每隔10秒就盲目地保存文件,爲什麼不測試一下是否已經改變,並保存它是否存在?如果文件已經改變,'ThisWorkbook.Saved'將被設置爲'False'。 – CLR