- 締切済み
Excel2007 queryの有無の確認
ExcelでシートにQueryがあるかどうかを Sheets().QueryTables.Count > 0 で確認していました。 旧バージョンのExcelでは、上記での記述で確認がとれたのですが Excel2007では仕様が変わっているのか、 Queryがある状態でも"0"となってしまい、 確認が取れなくなってしまいました。 Excel2007で記述を変える必要があるのでしょうか? もしくは、Excel2007で動作する他の記述などご存じの方 教えて頂けないでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- junnik
- ベストアンサー率0% (0/0)
Excel2007では少し仕様が変わり、QueryTableではなくListObjectが挿入されるようになりました。QueryTableへの参照はListObjectが持っています。以下のようにすれば目的のQueryTableを取得することができます。 set qt = Sheets(0).ListObject(0).QueryTable この部分さえ書き換えれば、QueryTableオブジェクトを操作する他のコードはそのまま利用できると思います。
- hotosys
- ベストアンサー率67% (97/143)
ANo.1です。 Excel2007以前とはちょっと違うみたいです。 とりあえず調べてみた結果です。 ThisWorkbook.Connections.Count で接続の数は表示できるようです。 ThisWorkbook.Connections(1).Ranges(1).Address(external:=true) とかでどのシートに接続してるかわかるみたいですが、「このシートに接続してるのは?」とかはわかりませんでした。 これ以上は他の人にお任せします、すみません。
- hotosys
- ベストアンサー率67% (97/143)
Excel2007でもQueryがある場合は Sheets("Sheet1").QueryTables.Count は1とかになります。 ただ Sheets("Sheet1").QueryTables.Count > 0 は0ではなくTrueになります。 シート名がSheet1だった場合、 Sub test() If Sheets("Sheet1").QueryTables.Count > 0 Then MsgBox "Queryあり" Else MsgBox "Queryなし" End If End Sub を実行しても正しい答えが得られませんか?
補足
ご回答ありがとうございます。 アドバイス頂いた内容を実施してみたところ、 "Queryなし"となってしまいます。 Queryがあると思っていますが、何か違っているのでしょうか。 クイックアクセスバーの[データ]タブで[接続]をクリックすると、 「ブックの接続」で[名前]なども表示されます。 また、[このブックで接続を使用する位置]では [シート]:Sheet1 [名前]:テーブル・・・ [場所]$A$1:・・・ というふうに表示されて確認できているのですが。
お礼
ご回答ありがとうございます。 ヒントになります。 また、いろいろ研究してみます。