我有一个存储在SharePoint Server上的Excel文档,该文档始终以只读模式在计算机上打开,因为我需要引用它。
每隔一段时间,为了获得最新的更改,我必须关闭文件并再次重新加载。Excel 2007中是否有任何选项可以让我简单地将以只读模式打开的文档刷新为服务器上的最新版本?
更好的是,有没有一种方法可以动态地完成此操作,而无需我进行刷新?
我有一个存储在SharePoint Server上的Excel文档,该文档始终以只读模式在计算机上打开,因为我需要引用它。
每隔一段时间,为了获得最新的更改,我必须关闭文件并再次重新加载。Excel 2007中是否有任何选项可以让我简单地将以只读模式打开的文档刷新为服务器上的最新版本?
更好的是,有没有一种方法可以动态地完成此操作,而无需我进行刷新?
Answers:
Yuval的解决方案可能就足够了,但前提是更改仅限于单元格内容。查询者未指出是否是这种情况。尽管如此:如果您要进行的更改是在工作簿中添加(甚至删除)工作表,该怎么办?
某种脆弱而令人讨厌的解决方案:将宏存储在隐藏的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/zh-CN/excel-help/run-a-macro-HP010342865.aspx http://msdn.microsoft.com/zh-CN/library/office/ff196165(v=office .14).aspx
尽管我没有审核所有内容,但是如果您还没有听说过PERSONAL.XLS(B),这似乎是非常有用的介绍:http : //www.rondebruin.nl/win/personal.htm