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を渡して呼び出すことができる。