有没有一种方法可以通过宏更新Excel中的查询连接文件名?

时间:2019-07-12 03:52:12

标签: excel vba connection-string

在我的摘要文件中,我有几个查询连接,这些查询连接将同一文件夹中的另一个Excel文件作为输入文件进行数据连接。 输入文件名会定期更改,因此每次更改时,我都需要转到每个查询连接以更改数据源的名称,这可能很麻烦。 我正在尝试找到一种使用宏批量更新连接文件名的方法。

我试图识别并访问文件名的参数,但似乎找不到正确的方法。

Sub Check_Queries()

    Dim filename As String
    Dim query
    Dim i As Integer

    For Each query In ActiveWorkbook.Connections

        Print query.OLEDBConnection.SourceConnectionFile

    Next query

End Sub

它返回此错误:

  

编译错误:没有合适的对象,该方法无效。

enter image description here

================================================ ======================

发现我后,丢失了“调试”错误。在“打印”之前,我继续制定解决方案,发现任务的参数是Activeworkbook.Queries.Formula 。我编写了以下子程序,并对其进行了测试,使其能够正常工作。欢迎对改进代码发表评论。

Sub Update_Queries()

Dim start As Integer
Dim finish As Integer
Dim query
Dim code As String
Dim oldPath As String
Dim newPath As String
Dim intChoice As Integer

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show
If intChoice <> 0 Then
    newPath = Application.FileDialog( _
    msoFileDialogOpen).SelectedItems(1)

    For Each query In ActiveWorkbook.Queries

        code = query.Formula
        'Debug.Print code
        start = InStr(code, "File.Contents(")
        finish = InStr(start + 15, code, "), null, true")

        If start <> 0 And finish <> 0 Then

            oldPath = Mid(code, start + 15, finish - start - 16)
            'Debug.Print oldPath
            If Not oldPath = "" Then

                query.Formula = Replace(code, oldPath, newPath)

            Else

                Debug.Print Right(code, InStr(code, "), null, true"))
                query.Formula = Left(code, start + 14) & newPath & Right(code, InStr(code, "), null, true"))

            End If

            code = ""
            start = Empty
            finish = Empty
            oldPath = ""

        End If

    Next query

End If

End Sub

0 个答案:

没有答案