SSブログ

エクセルの互換性を考える(2) [システムトレード]

エクセル2007において、ファイルの保存形式を「Excel バイナリブック」と「Excel 97-2003 ブック」の各形式に設定し、それぞれでブックを作成・保存するマクロを実行してみましたが、特に不具合は生じませんでした。

マクロ中でファイルフォーマットを指定していれば、問題はないようです。ただし、それが普遍的に成り立つのかどうかについては分かりません。
ちなみに、通常のエクセルブックではなくバイナリブックを想定したのは、マクロ無効とマクロ有効の各ブックにシステムを対応させるのが厄介だからです。

ただし、マクロ上のファイルフォーマットは、いずれもxlExcel12で共通なので、ファイルの保存形式の設定は、バイナリブック形式でなくても大丈夫です。
拡張子を変更すれば、いずれの形式にもなるようです。

さて、昨日の続きに戻りますが、互換性を考慮する際の注意事項の3つ目は、言うまでもなくマクロ仕様の違いです。
エクセル2000以降ではマクロ仕様は大きく変わっていないようですが、それよりも前のバージョンでは使えない関数等が結構あります。

例えば、エクセル97ではInStrRev関数やRound関数は使えませんし、また、昨日述べたようなPasteSpecialメソッドの引数として、xlPasteColumnWidthsを指定することはできません。
それ以外にも、多くの相違点があるものと思いますが、エクセル97のVBAの解説書が事実上入手困難となっている昨今、実際に動作させて確認していくしかありません。

ただ、これらの多くは、他に代替手段がありますので、上位バージョンの新しい機能を使わないのであれば、マクロレベルで互換性を維持することは難しくないように思います。

もっとも、ひとつ厄介な問題があるとすれば、ライブラリの互換性の問題です。参照設定しているライブラリファイルの名称が変わっていたりすると、他のバージョンではそのライブラリを参照設定できません。

具体的には、「Microsoft Visual Basic for Application Extensibility」ライブラリがあります。これは、エクセル97では上記の通りの名称なのですが、エクセル2003(恐らくエクセル2000以降)では、末尾に「5.3」の数字が付きます。

エクセル2003で作成したマクロで、このライブラリを参照している場合、それをエクセル97で開いてマクロを実行すると、コンパイルエラーが生じます。
その場合、エクセル97上で参照設定をやり直せばいいのですが、マクロの数が多いと結構厄介ですし、マクロに詳しくない人にとっては変更は難しく感じるでしょう。

そんな時は、エクセル97で参照設定を行ってからマクロを保存し、それを配布すれば、エクセル2003でマクロを実行しても参照設定をやり直すことなく正常に動作します。
どうやら、ライブラリには上位互換性があるようで、元のライブラリに勝手に「5.3」を付けて参照設定してくれます。

また、エクセル97で保存すると、ファイルサイズが小さくなる(大きくならない)というメリットもあるようです。
もちろん、以降のバージョンのエクセルでも問題なく開けますし、動作します。

以上、エクセルの互換性について考えてきました。KFシステムクリエイターでは、単品レベルにおいてエクセル97から2007までの完全互換を実現できました。
とある調査では、エクセル2007はまだ10%程度しか普及しておらず、また、未だにエクセル2000以前のバージョンを使用しているユーザーも多いようです。

互換性を確保することは、そのような幅広いユーザー層に向けて機会を提供すると言う意味で、非常に重要なことだと認識しています。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。