これは32ビットと64ビットの問題ですが、新しいバージョンのExcelでは実行できないが、Excel 2003ではこのコードのデバッグに役立つ必要があります。このコードがコンパイルされない原因となっているバージョン間でVBAに構文更新がありましたか?Excel 2016のVBA構文のアップデート
デバッガは行で停止します。コンパイルしないように、このコードを引き起こしてこれらのバージョン間のVBAの構文更新が
With Selection.QueryTable
これは32ビットと64ビットの問題ですが、新しいバージョンのExcelでは実行できないが、Excel 2003ではこのコードのデバッグに役立つ必要があります。このコードがコンパイルされない原因となっているバージョン間でVBAに構文更新がありましたか?Excel 2016のVBA構文のアップデート
デバッガは行で停止します。コンパイルしないように、このコードを引き起こしてこれらのバージョン間のVBAの構文更新が
With Selection.QueryTable
ありましたか?コードは罰金コンパイル
号、Selection
あなたが遅延バインディングを決意し、実行時になるだろうと、それを照会どんなメンバー、そこにただのObject
についてです。
ありが 2003年から2007年の間にExcelのオブジェクトモデルに加えた:ListObject
が導入されましたが、QueryTable
が削除されていなかった、それはまだRange
クラスのメンバーです。しかし、それは今もListObject
クラスのメンバです:
は、上記スクラッチ、@GSerg's commentを参照してください。
ListObjectは、Excel 2003に存在し、それがすでにクエリテーブルのプロパティがあります。 2003年には、クエリテーブルの周りにリストオブジェクトを作成できないため、そこでは機能しません。可能なだけでなく、クエリテーブルを作成するときのデフォルトであるExcel 2007から始まり、Excel 2016で始まるクエリオブジェクトテーブルを持たないクエリテーブルは、クエリが行を返さないとすぐに式を完全に破棄します。
あなたのコードはひどいアイデアである、Selection
をオフに動作します - それはどのようなマクロレコーダーの記録だが、それはそれは全く何もする最善の方法だというわけではありません。あなたの「照会表」は、このようなものに見える場合
:
そして、あなたはそれにいるときにリボンが「表ツール」タブを持っているが、...それはListObject
です。
With Selection.ListObject.QueryTable
しかし、理由はあなたのことは、まだひどいアイデアだ:そして、あなたの
Selection
がそのテーブル内にある場合は、コメントで示唆されたとして、その後
Selection.QueryTable
は、あなたが
Selection.ListObject
経由でアクセスする必要があり、それをカットするつもりはありませんコードはひどく虚弱です。
代わりにオブジェクトを使用してください。 プロジェクトエクスプローラ toolwindow(Ctrl + R)を見て、ワークシートを探します。それを選択して、のプロパティ toolwindow(F4)を見てください。 名前を付けてください:デフォルトの(Name)
プロパティを意味のあるものに置き換えてください。 MySuperImportantSheet
。
これで、その識別子を使ってVBAコードでそのシートを参照することができます。そのシートに「クエリテーブル」が1つしかないと仮定すると、このWith
ブロックははるかに堅牢になります。
If MySuperImportantSheet.ListObjects.Count <> 1 Then
'handle unexpected weirdness
Exit Sub
End If
Dim tbl As ListObject
Set tbl = MySuperImportantSheet.ListObjects(1)
With tbl.QueryTable
'whatever you wanted to do with it
End With
それはいい答えです。実際にListObjectにQueryTableがあるかどうかを誰かがもう一度確認してテストしたい場合は、この4つの投稿をチェックアウトすることができます:[4つのListObject QueryTableテスト - 最後のものよりも良い](http:// yoursumbuddy。 com/four-listobject-querytable-tests-better-last)を使用します。 –
'ListObject'はExcel 2003に存在し、すでに' QueryTable'プロパティを持っています。 2003年には、クエリテーブルの周りにリストオブジェクトを作成できないため、そこでは機能しません。可能なだけでなく、クエリテーブルを作成するときのデフォルトであるExcel 2007から始まり、Excel 2016から始まるクエリテーブル*を使用して、そのリストオブジェクトの周りにリストオブジェクトが永久に破棄されます行(私はMSが修正するために失敗した楽しい小さなバグ)。 – GSerg
ようこそ!それは*コンパイル*されていないか、またはランタイム*で失敗していますか?あなたは "コンパイル"と言いますが、 "デバッガ"(実行時を意味します)にも言及します。正確なエラーメッセージは何ですか?コメントで返信するのではなく、このステートメントのコンテキストを含む詳細を追加するには、[あなたの質問を編集](https://stackoverflow.com/posts/41289607/edit)をクリックしてください。ありがとう! - また、質の高い回答を求める質問の詳細については、[ツアー](https://stackoverflow.com/tour)をご覧ください。 – cxw
「デバッガが停止しました」は、エラーの説明として役立ちません。コード自体は問題ありませんが、 'Selection'の現在の値によっては実行時に失敗する可能性があります。 – GSerg
'Selection.Listobject.Querytable'を試してください –