我有一个存储在 SharePoint Server 上的 Excel 文档,我始终在我的计算机上以只读模式打开它,因为我需要参考它。
时常,为了获取最新的更改,我必须关闭文件并重新加载。Excel 2007 中是否有任何选项允许我简单地将以只读模式打开的文档刷新为服务器上的最新版本?
更好的是,有没有一种方法可以动态地完成此操作,而无需我点击刷新?
答案1
Yuval 的解决方案可能足够了,但前提是更改仅限于单元格内容。Inquirer 没有表明是否是这种情况。尽管如此:如果您想要的更改是在工作簿中添加(甚至删除)工作表,该怎么办?
有点脆弱和令人讨厌的解决方案:在隐藏的 PERSONAL.XLS(B) 中存储一个宏,以执行定期(通过重新安排自身)关闭和重新打开工作簿。 PERSONAL.XLS(B) 应位于 %USERPROFILE%\AppData\Roaming\Microsoft\Excel\XLSTART\ )
Sub wkbRefresher()
Dim refreshedWorkbook As Workbook
Dim WkBks As Workbooks
'full filepath
fPath = "c:\tmp\mutatingWorkbook.xls"
'in HH:MM:SS format:
refreshInterval = "00:05:00"
For i = 1 To Application.Workbooks.Count
Debug.Print (Application.Workbooks.Item(i).FullName)
If LCase(Application.Workbooks.Item(i).FullName) = LCase(fPath) Then
Debug.Print (" Yep thats the one! Lets refresh it.")
Application.Workbooks.Item(i).Close
'refreshedWorkbook = WkBks.Open(fPath, True, True)
Set refreshedWorkbook = Excel.Application.Workbooks.Open(fPath, True, True)
End If
Next i
' Use at your own risk: this is an "asynchronous", the execution cannot be stopped by merely pressing the stop button in the VBA interface.
' You might have to do something like put a break marker on the line OnTime line so that next time around, it doesn't respawn itself.
Application.OnTime Now + TimeValue(refreshInterval), "wkbRefresher"
End Sub
当然,上述子项可以参数化,并且/或者您可以将其附加到自定义工具栏按钮或类似的东西。由于工作簿保存会保存活动工作表、活动单元格等状态信息,因此您可能还想包含几行以保存您首选的活动工作表名称并在每次重新打开后重新激活它。
参考:
http://office.microsoft.com/en-us/excel-help/run-a-macro-HP010342865.aspx http://msdn.microsoft.com/en-us/library/office/ff196165(v=office.14).aspx
虽然我没有完全审查过,但如果你还没有听说过 PERSONAL.XLS(B),这似乎是一个非常有用的介绍:http://www.rondebruin.nl/win/personal.htm