我们的很多网络中的用户使用从模板创建一个Excel工作簿(.XLSM [办公室2010])。
现在,有我在模板做了一些重要的变化,我想所有的用户更新他们的工作簿,但我想,以避免接触他们。
所以,我的想法是让自动更新(复制他们的工作簿的内容复制到新创建的工作簿,并删除之前的版本)。
不幸的是在现有的工作簿没有更新的宏,但它们引用到另一个工作簿中的宏。每次他们打开他们的工作簿时的数据连接,自动变成刷新。
我可以用这个清爽的事件来触发的(数据源)宏的Excel文件(可能通过创建WITHEVENTS级模块)?
你可以沿着这些线路,在用户打开工作簿的东西,但它的工作是控制版本。您可以更改此有代码修改表等。
该文本文件,正确的,包含ver9,工作簿包含ver8在ver_cont工作。
Function get_version() As String
Open "c:\workspace\test_ver.txt" For Input As #1
Input #1, get_version
Close #1
End Function
Function check_version()
If get_version = Worksheets("Ver_cont").Range("a1") Then
' Open the workbook here
Else
' Copy the workbook
' Then open it
End If
End Function
你可以试试这个。它采用WITHEVENTS和运行时的数据更新。
首先,你需要创建一个类名“clsQueryTable”,并把这个代码在它
Option Explicit
Public WithEvents QTQueryTable As Excel.QueryTable
Private Sub QTQueryTable_BeforeRefresh(blnCancel As Boolean)
'Set blnCancel to true to stop the refresh
Debug.Print blnCancel
End Sub
Private Sub QTQueryTable_AfterRefresh(ByVal blnSuccess As Boolean)
'blnSuccess can be used to check for refresh success.
' I would put your update code here!
Debug.Print blnSuccess
End Sub
然后,你可以把这个代码在你上的ThisWorkbook workbook_open事件
Option Explicit
Dim colQueryTables As Collection
Private Sub Workbook_Open()
Dim shtMySheet As Worksheet
Dim clsQT As clsQueryTable
Dim qtMyQuery As QueryTable
Dim loMyList As ListObject
Dim conn As WorkbookConnection
Set colQueryTables = New Collection
For Each shtMySheet In ThisWorkbook.Worksheets
For Each loMyList In shtMySheet.ListObjects
Set clsQT = New clsQueryTable
Set clsQT.QTQueryTable = loMyList.QueryTable
colQueryTables.Add clsQT
Next loMyList
Next shtMySheet
For Each conn In Connections
conn.Refresh
Next
End Sub