- ベストアンサー
Excelのバージョンの違いを吸収するには?
こんにちわ。 Excel2000でカンマ区切りのテキストファイルをインポートするマクロを組んだのですが、 Excel2002の環境で実行すると、漢字等文字列の入っている列が文字化けしてしまい、困っています。 原因を調べてみたところ、QueryTablesのTextFilePlatformプロパティの値が原因ではないかというところまで行き着きました。 ver2000では、値が「xlWindows」 ver2002では、値が「932」 となれば、文字化けせずに済むようなのですが、 両者でコードを書き分ける(ver2000用のファイルとver2002用のファイルを作成する)か、 実行しているExcelのverを取得して、その条件により値を変更するしかないのでしょうか? Helpで調べた限りでは、 ver2000では、(xlMacintosh、xlMSDOS、xlWindows)しか定数が使えないようです。 その他のアイディア、こういう風に書くと一つの値で済む等、教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ver2000では、値が「xlWindows」 >ver2002では、値が「932」 >となれば、文字化けせずに済むようなのですが、 そこまで調べてるのでしたら、素直に条件分岐させるだけなのでは? 安直なコードですが、 Select Case Application.Version 'Excel2002 or Later Version Case Is > 10: A = 932 'Excel Other Version Case Else: A = 2 End Select こんな感じで。 別解としては、CSV の取り込み自体を VBA で自力でやってしまうのはどうでしょう? http://www.asahi-net.or.jp/~ef2o-inue/ URL先の[VBA応用]-[CSV形式テキストデータの読み込み]のページが参考になりそうです。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ver2002のヘルプを読んでみましたが ver2002でも、(xlMacintosh、xlMSDOS、xlWindows)しか定数が使えないようです。 このことからすると、ちょっと原因としてはちがうのではないかとおもいますが 932は、多分SHIFT_JISを表すコードページで これが直接指定できるなら、これでやってみたらどうでしょう。 ちなみに xlMacintosh:1、xlMSDOS:3、xlWindows:2 でした。
お礼
BLUEPIXYさん、回答ありがとうございます。 ver2002で、コード上のTextFilePlatformにカーソルをあてF1キーで見るとヘルプが出ますが、 私のExcelのヘルプには定数の制限が載っていなかったんですよ。 Helpが全部インストールされていないのかな・・・ >932は、多分SHIFT_JISを表すコードページで その後、ver2002にて、マクロの記録でテキストファイルを読み込む操作を保存する際に、 「データ」-「外部データの取り込み」-「データの取り込み」から、ファイルを選択すると、 「元のファイル」という項目に該当するのが、932 : Japanese(Shift-JIS)になっていました。 やはり、バージョンによってコードの一部を書き換えた方が早そうですね。
- bin-chan
- ベストアンサー率33% (1403/4213)
「数値」では覚えにくいから「文字」で表現できるようにしてあるだけです。 今、Excelが無い環境からなので確認できませんが、もしかしたら同じ「値」かも。 [xlWindows]をイミディエイトウィンドゥで表示させてみると「値」がわかるはずです。
お礼
bin-chanさん、早速の回答ありがとうございます。 >「数値」では覚えにくいから「文字」で表現できるようにしてあるだけです。 ふむふむ。と思うのですが、 イミディエイトウィンドゥで確認しますと、 xlWindows = 2 だそうです。 逆に、ver2000のTextFilePlatformプロパティの定数を932にしてみると、「プロシージャの呼び出し、または引数が不正です。」とエラーが出てストップします。 使ってもらう方に、Excelのバージョンを調べてもらい、 それぞれに該当するファイルを使ってもらうしかないかな・・・ と思い始めています。
お礼
お礼が遅くなり、申し訳ありません。 条件分岐も考えたのですが、Excelのバージョンによって使うファイルを変更する形にしました。 参考URLもありがとうございます。