删除Excel VBA中与特定查询相关的所有连接

kyvafyod  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(161)

我已经创建了一个宏,它创建了一个Power Query并使用SQL来获取数据,然后在Power Query中转换数据并将结果输出到一个新的选项卡中。该宏然后将查询表转换为一个范围,然后删除查询。我知道我可能已经过度复杂了这个过程,但这里是我的问题...
每当我删除查询时,都会有一个空的连接。有人能帮我写一个宏来删除所有到查询的连接,然后删除查询本身吗?我只想保留输出信息。查询将始终被称为RSPL_Query。
我希望避免删除所有查询或所有连接的任何解决方案。此宏将用于各种电子表格,因为它是加载项的一部分,所以我不希望无意中删除其他人的查询。
我已经尝试了下面的方法,但我总是得到一个运行时错误(1004)-应用程序定义或对象定义的错误。

Sub DeleteRSPLQueryConnections()

    Dim wb As Workbook
    Set wb = ActiveWorkbook
    
    Dim cn As WorkbookConnection
    For Each cn In wb.Connections
        If cn.Type = xlConnectionTypeODBC And InStr(1, cn.ODBCConnection.Connection, "RSPL_Query", vbTextCompare) > 0 Then
            cn.Delete
        End If
    Next cn
    
End Sub

我也尝试了上述的多个其他迭代,但几乎总是得到一个错误或他们不工作。

sczxawaw

sczxawaw1#

两个潜在问题:

  • 当从集合中删除时(在您的例子中是cn.connections),您删除了第一条记录,因此第二条记录现在成为第一条记录,但是代码跳到下一条记录。
  • 您报告的错误似乎是由Instr函数中的节引发的,特别是cn.ODBCConnection.Connection。使用F8单步执行代码到此点,然后使用局部变量窗口检查可供您使用的不同属性和值,并确定需要测试的属性和值。

下面的解决方案只解决了我发现的第一个问题,而不是第二个-但我希望上面的信息足以让你自己解决剩下的问题。

Sub DeleteRSPLQueryConnections()

Dim wb As Workbook
Set wb = ActiveWorkbook

Dim lConnectionNum As Long, cn As WorkbookConnection
For lConnectionNum = wb.Connections.Count To 1 Step -1
    Set cn = wb.Connections(lConnectionNum)
    If cn.Type = xlConnectionTypeODBC And InStr(1, cn.ODBCConnection.CommandText, "RSPL_Query", vbTextCompare) > 0 Then
        cn.Delete
    End If
Next

End Sub

相关问题