● Excel2000でのピボットテーブルのPivotCache.CommandText(ピボットのソースのSQL文内容)のVBAでの自動書き換え

※間違いが判明しました。プログラム紹介のあとの別テスト結果についてのまとめを必ず参考にしてください。

今日はうれしいことがありました。(何年か前のお話です)

悩んでいたピボットテーブルのPivotCache.CommandTextのVBAでの自動書き換えができるようになりました。\(^^)/

何回やっても「1004:実行時エラー」になってしまい、ヘルプやWebにも情報がなく、2日間くらい悩みましたが、でもがんばって推測して、やっと答えを見つけました。\(^^)/

久々に格闘した~!!\(^^)/

そして勝った!!\(^^)/\(^^)/\(^^)/

うーん、Excel2007以降だとこのような苦労は無いようでしたが(そのままテキストデータをテキスト型として設定できたので)、Excel2000~2003までは、PivotCache.CommandTextのデータは配列データで設定してあげないといけないという、メッチャ面倒なことになっていました。

しかも、SQLの句ごとに配列の要素に指定しないといけないという・・・(^^)

そんなんヘルプのどこにも書いてないやん!!(^^)

Webにもないし・・・
英語のサイト見てもわからんかった・・・
英語自体もわからへんし。。。。 (TT)

イミディエイトウィンドウで

? PivotCache.CommandText = "aaa" ってやっても
? PivotCache.CommandText = "SELECT フィールド名 FRROM ファイル名 テーブル名 (正しいSQL内容)" ってやっても
どっちでやっても「False」が返ってきて、「なんか変だなあ・・・前者はもちろんFalseでいいけど後者はTrueじゃないの???」と思ってたら、
? PivotCache.CommandTextでSQL表示したときに、FROM句の前に改行入ってるから気が付いたです・・・。

ん?改行入ってる?

おかしいやん!なんで?

PivotCache.CommandTextがもし単一のテキストデータだとするなら、そんなかに改行コードなんて自動的に含まれるのか?
SQL文の途中で改行コードが含まれるなんてありえん気が・・・

あ!!!

もしかして PivotCache.CommandText は単純なテキストデータではなく、
テキストデータの配列なのでは???

・・・と、悩みに悩んでもしやと思って、配列でSQLを代入する試しのコードを書いてみたら・・・

ビンゴでした!!!!

八方ふさがりだったけど、ついに見つかった~!!

わーい!\(^^)/

しかし・・・

なんで配列なんだよおおお???

くそう、ヘルプにちゃんとそう書いておいておくれよ~!!!

Variant型としか書いてないからすぐには分かんなかった・・・

でも結局「Variant」もヒントになって「配列」かもと思いつきましたが・・・
サンプルコードは配列ではなく完全に単一テキストを指定(代入)するように書いてあったので、それにも騙されてしまいました・・・悲し・・・

プログラミングのプロならこんなの数分で気づくんだろうな・・・
僕はプログラミングのプロじゃないから2日もかかってしまった・・・

しかし、最初から「データ型はVariant型で設定にはSQLの句ごとに要素格納された配列を使用します・・・」ってヘルプに書いてくれればこんなに悩まなかったのに・・・(TT)

おまけにAccessほうのピボットではPivotCache.CommandTextのデータ型は配列じゃなくてただのテキストデータだったから、それにも目をくらまされて迷ってしまいました・・・。泣

でも何はともあれ、解決できてよかたです。
これでピボットテーブルの扱いが格段に楽になって、しかもAccessとの連携も深まるです・・・。

ほんと、よかった・・・。\(^^)/

作業が楽になる・・・。(^^)

各句の配列の要素の文字数の制限は、あるかもしれませんが、相当長くてもいいみたい・・・。
以下、標準モジュールに貼り付けてテストする用のコードです。

===========

※追記
2017/03/08 Excel2010で、ピボットのソースがMSQyeryの場合も、変数をVariantの配列じゃなく通常のテキスト型にして、SQL文のすべての句を半角スペース区切りで1つにつなげると、この場合も変更できました。xlsmを閉じる前じゃないと有効じゃないのかもしれないですが・・・。
リボン→ピボットテーブル→オプション→データソースの変更→接続のプロパティ→定義→クエリの編集ボタン、にて、そのボタンを押したときにMSQueryの編集画面が立ち上がる間は大丈夫みたいです。
「接続のプロパティ」メニューがグレーアウトしている場合はできません。

※重要!!追記2(2000と2003でのテスト結果)

ちょっと配列のことについて記述が間違っていたので訂正いたします。
句ごとの区切りではなく、どうやら、文字数ごとの要素の区切りだったみたいです。
SQL文の内容を代入する文字列型の配列の変数にて、1要素あたりで、半角で394文字くらいを超えるとダメみたいです。「型がちがう」みたいなエラーになります。
SQL文が、全部で 半角で394文字以内だと、大丈夫みたいです。
その場合は、配列じゃなくても単一の文字列型の変数でも大丈夫みたいです。