我正在使用一个工作簿打开事件下面的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