在我的摘要文件中,我有几个查询连接,这些查询连接将同一文件夹中的另一个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
它返回此错误:
编译错误:没有合适的对象,该方法无效。
================================================ ======================
发现我后,丢失了“调试”错误。在“打印”之前,我继续制定解决方案,发现任务的参数是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