是否有运行在当数据连接是通过另一个Excel文件(数据目标)刷新的Excel文件(数据源)的宏的可能性?

问题描述 投票:0回答:2

我们的很多网络中的用户使用从模板创建一个Excel工作簿(.XLSM [办公室2010])。

现在,有我在模板做了一些重要的变化,我想所有的用户更新他们的工作簿,但我想,以避免接触他们。

所以,我的想法是让自动更新(复制他们的工作簿的内容复制到新创建的工作簿,并删除之前的版本)。

不幸的是在现有的工作簿没有更新的宏,但它们引用到另一个工作簿中的宏。每次他们打开他们的工作簿时的数据连接,自动变成刷新。

我可以用这个清爽的事件来触发的(数据源)宏的Excel文件(可能通过创建WITHEVENTS级模块)?

excel vba eventhandler data-connections
2个回答
0
投票

你可以沿着这些线路,在用户打开工作簿的东西,但它的工作是控制版本。您可以更改此有代码修改表等。

该文本文件,正确的,包含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

0
投票

你可以试试这个。它采用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

© www.soinside.com 2019 - 2024. All rights reserved.