Excel2003で構築したマクロをExcel2010に移行する場合、いくつか注意点がありましたので連携したいと思います。
あくまで色々と実験してみた結果の個人的な意見です。賛否両論あろうかと思いますので、適宜自分に都合のよいところを取り入れていただければ幸いです。
実験結果は都合により、載せられませんが。。。
1. Excel2003で行を右クリックした時の「形式を選択して貼付け」機能のコントロールIDは変更になりました。よって、このIDを使用しているコードはOffice2007以下かどうか判定し分岐する必要があります。
残念ながら、具体的なコードは都合により載せられないです。。。ごめんなさい。
755で全文検索して見つかる場合は要注意です。
他にも変更になったIDがありそうですが、簡単に調べた限りでは見つけられませんでした。
2. Excel2007から最大行数が増えました。よって、Excel2003で65536のようにハードコーディングしている場合(例えばデータ件数を調べる処理など)は、不具合がでやすいです。
必ずRows.Countを利用し、Excel2003でもExcel2010でも動作するように修正しましょう。
特に65537とかは気づきにくいので、これもRows.Count + 1などと変換しましょう。
推奨は6553で全文検索してみることです。
3. Excel2010では時々、VBAの実行時間が長すぎると、MsgBoxが表示されなくなります。
その場合はMsgBoxのオプションにあるシステムモーダル化(もしくはアプリモーダル化)オプションを指定します。(vbSystemModal もしくは vbApplicationModal)
vbSystemModalはExcel2003にもあるため、コンパイルエラーは発生しません。
4. xlsmに移行するか、xlsの互換モードでいるか悩むところです。が、xlsの互換モードのままを推奨します。なぜならば、xlsmに変換した場合、影響が変換したからか、Office2010のマクロの問題なのかの切り分けが困難であること。もしかしたら、Office2003で再現するか再度確認が必要になるかもしれないことがあること。そして、xlsxやxlsmはある程度の容量を超えると警告なしにデータが保存されないことがある点を考えると、互換モードのままをユーザに推奨するよう説得するのが得策です。
5. よくExcel2010のVBAは遅いと聞きます。大量データを用意し、自前のテキストロード処理を実装している場合、Excel2010のほうが厳密に測った結果速くなりました。
これの原因は互換モードとかではなく、単純に事前にVBAのコンパイルをしていないせいだと思います。コンパイルすれば共に最低でもほぼ同じ速度で動作する実験結果を得ました。
6. Excel2000から脈々と続く、Formで入れたコマンドボタンのサイズやフォント、位置が変わるバグは、Excel2003、Excel2007、Excel2010でも発動します。ただし発動条件はそれぞれのバージョンで違うようです。絶対に全ボタンを押下したり、スクロールさせてみてください。特にスクロール範囲をVBAで変更している場合は要注意です。その場合、Excel2010ではボタンサイズが勝手に変わりました。変わってしまうExcelファイルはどうあがいても変わってしまいます。その場合は問題ないファイルをベースに作りなおしたほうが早いです。試行錯誤したり、ボタンだけを再配置しても無駄のようです。
7. マクロの有効化は、Excel2003は毎回有効にするか聞いてきますが、Excel2010では一度確認するとリセットするまで有効にしたことを覚えてくれます。これは逆にユーザが操作性に疑問を持つので教育が必要です。
8. 印刷プレビューの描画範囲がExcel2010では小さくなるため、若干見にくくなることをユーザに理解させる必要があります。
9. 描画のずれは、Excel2003でもExcel2010でも同じように発生します。よって、Excel2003でギリギリ印刷する設定の場合はExcel2010ではずれる可能性がありますが、少し余裕をもたせたレイアウトの場合や自動でセル幅を広げる場合は、レイアウトのズレは気にしなくてよさそうです。
10. ファイルの保存先をCドライブの直下にしている場合は、変更させるほうが良いでしょう。特にWindows 7ではユーザのスキルレベルによっては動かないなどの苦情を聞くことがありそうです。よって、マニュアル等でマクロの配置先をユーザを納得させる必要があります。
最後に。
11. CommandBarsを使っているマクロについては検証していません。リボンインタフェースになったことで、もしかしたらそのままでは使えない可能性がありそうです。こちらは余裕ができれば別途検証してみたいと思います。
12. Office自体の操作性の違いについては、事前に違いが大きいことを説明してから、細かなことを説明し、バージョンが変わり大きく違うことになったと説明する方が良いでしょうか。先に細かなことを説明してから最後にバージョンが大きく変わって、操作性が変わったといっても納得されにくい気がします。説明の順序の問題ですが。
2012年03月28日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/54657245
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/54657245
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
こちらで試した結果の報告です。
3の件、その設定でもMSGBOXが表示されません。
6の件、ページ設定の拡大縮小印刷が原因でないかと考えられます。この設定を100%に戻したことによって再現されなくなりました。
以上です。
長い間、全く気づいてませんでした。反応が遅くてごめんなさい。
見てくれたのですね。ありがとうございます。
上記の件、「あらまぁ」です。。。
特に3の件、遅いですが調べてみようかと思います。
下記お試しあれ
Worksheet.PageSetup.Zoom = False
試せていませんが、これでいければ簡単で良いですね。
情報有り難うございます。