きなこSHOW

自作プログラム置き場です。

ExcelブックのConnectionをすべて削除するVBAコード

Power Queryを自動操作するツールで、Connectionを初期化する際、エラーになったので回避策のメモ。すべての接続をエラーを起こさず削除できるサンプルコードを掲載。

Public Function FncDelteteConnectionsFromBook( _
                ByVal objBook As Workbook, _
       Optional ByRef rsMsg As String = "") As Boolean
On Error GoTo Err_Sec

    Dim bRet As Boolean: bRet = False
    Dim sMsg As String:  sMsg = ""
    Dim i As Long

    rsMsg = ""
    
    If objBook.Connections.Count > 0 Then
    
        '--- ブックの外部接続をすべて削除する ---
        With objBook.Connections
            For i = .Count To 1 Step -1
                If Not .Item(i).Type = 7 Then
                    .Item(i).Delete
                End If
            Next
        End With
    End If
    
    bRet = True

Exit_Sec:
On Error Resume Next

    rsMsg = sMsg
    
    FncDelteteConnectionsFromBook = bRet
    
    Exit Function

Err_Sec:
    sMsg = Err.Number & ":" & Err.Description & "(FncDelteteConnectionsFromBook)"
    Resume Exit_Sec
End Function

削除しようとしてエラーとなったConnections.Item(i)の「Name」をイミディエイトウィンドウで表示させると、「ThisworkbookDataModel」という名称だった。

これは自分が作成したConnectionではないので、予約されたConnectionなのだろう。
Nameで判断して削除対象から除外しても良いが、Excel.WorkbookConnectionのメンバに「Type」というのがあり、「ThisworkbookDataModel」のTypeは「7」(「xlConnectionTypeMODEL」)だったので、Typeが7以外を削除することで、エラーを回避できる。

第1引数にThisworkbookを渡して呼び出すことができる。