実現したいこと
該当ソースファンクション内の「qry.Delete (True)」処理が環境によってエラーとなる原因または回避策が知りたい。
発生している問題・分からないこと
同じ環境(OFFICEはMICROSOFT365,同じ参照設定)の異なるPCでクエリの削除を実行すると1台は処理できるが、もう1台では以下のエラーが発生する。
エラーメッセージ
error
1EXCEL VBAで作成したファンクションを実行すると、環境によって「qry.Delete (True)」の部分で以下のエラーが発生する。 2エラー番号:445 3説明:オブジェクトはこの動作をサポートしていません。
該当のソースコード
Function DeleteQueryTable(ByVal queryname As String) As Boolean Dim wb As Workbook Dim qry As WorkbookQuery Dim tempquery As String 'ワークシートに接続 Set wb = ThisWorkbook '削除の実行 For Each qry In wb.Queries 'クエリ名を取得する tempquery = qry.name '判定する If tempquery = queryname Then 'クエリを削除する qry.Delete (True) DeleteQueryTable = True Exit Function End If Next End Function
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
teratailやGoogleで検索しましたが、情報が全くありませんでした。また、ソースコードを色々と変更しましたが、同じでした。
環境も一通り調べましたが、差異は発見できませんでした。
補足
特になし
エラーが再現できない・・・どんなクエリをどんなタイミングで削除しているんですか?
ご質問ありがとうございます。
クエリはPDFファイルをエクセルシートに展開するものをVBAで追加したもので、
展開後にクエリを削除する処理でエラーになります。
エラーになる環境でもクエリを手作業で削除することはできます。
エラーになる環境とエラーにならない環境で実行しているVBAは同じもので、
相違点はPC環境のみなので、何らかの環境が影響しているものと思料しています。
よくありそうな調査として
ステップ実行とか、qry.Delete (True)の行にブレイクポイントを設定して、少し待ってから再開しても同じエラーで止まるのですか?
調査方法のご教示ありがとうございます。
こちらで調べたところ、正常に動作しないPCでは、qry.Delete (True)は動作しませんが、qry.Deleteは動作することが判りました。何らかの理由でクエリのメソッドが相違しているようです。
qry.Deleteではなく、qry.Delete (True)を使った理由は、クエリだけでなく接続も削除したかったためですが、qry.Deleteだと何故か接続が残ってしまうケースがあるようなので、回避策としてqry.Deleteを使用して、別途接続だけを削除する方法を検討することにしました。
色々とご教示ありがとうございます。また、根本的な原因は不明ですが問題が発生しているPCは環境を変更するのが難しいので、根本原因は追究せずに回避策で対応することとしました。

回答1件
あなたの回答
tips
プレビュー