|
YU-TANG さん、谷です。
>ただ、ふと思ったのですが、コードが動くということと、それが意図
>した挙動になるかどうかはまた別ですよね。
そうですね。
プログラミングの世界にも「建前」と「本音」があります。
「建前」は、「実行環境が必ずこうなっているはずだ、という決め付けでプログラムを作ってはいけない」というものです。
私が個人的に気になるのは、「メニューが廃止され、『コマンド タブ』と呼ばれるUIが新たに実装された」という点です。
http://www.microsoft.com/office/preview/uioverview.mspx
私はマクロを作ると、それのためのメニューをわざわざ作るのは面倒なので、
Dim SubMenu As CommandBarButton
Set SubMenu = CommandBars("Worksheet Menu Bar").Controls("ツール(&T)").controls.Add(msoControlButton)
With SubMenu
.Caption = メニュー名
.OnAction = マクロ名
.Style = msoButtonCaption
End With
みたいなことをやって、「ツール」メニューにメニュー項目を追加して動かすということを時々やっています。
もちろんこれは「『ツール』というメニュー項目がワークシート メニュー バーに必ず存在する」ということを前提に書いてあるコードであるわけで、「Excelは必ずこうなっているはずだ」と決め付けてコードを書いている、お行儀の悪いプログラムということになります。
>Excel 12 の最大行数は現行の 16 倍に当たる 1,048,576 行に拡張
>されるそうですが、
1,048,576行×16,384列 になるそうですね。
そうすると今日たまたま見かけた次のような
>コードはどうなってしまうんでしょう。
>
> Set LastCell = Range("A65536").End(xlUp)
>
>これって、割とよく見かける最終行の取り方だと思うのですが、
>Excel 12 では必ずしも真ではなくなってしまうわけで。
建前上は「Excelの最終行は 65536行だ」と決め付けて書いてあるコードなわけですから、これもマイクロソフトに言わせたら「お行儀の悪いプログラムだ」ということになりますね。
しかし、建前は建前。本音は本音。
2000年問題を思い出します。
YU-TANG さんのおっしゃるとおり、上記のコードは必ずしも真にはなりません。
例えばExcel 12 では、上記の拡張によって、ひとつのワークシートですべての都道府県のすべての郵便番号(約12万件)が表せるようになりました。だからといって12万行入力されているワークシートを作ったら、もう上記のコードは正常には動作しませんね。
使われているワークシート範囲を調べる UsedRange というプロパティがあるんですが、こいつ時々誤動作するんですよ。だからあまり使えない。
今まで列は 256列までだったので、不幸にも列を示す変数を Byte 型で宣言していた人は、コードの作り直しになることでしょう。
私が上で書いたコードは、正常に動作するかどうかわかりません。
そもそも、ワークシート メニュー バーにはもう「ツール」というメニューがないわけですから、おそらくエラーになってしまいます。(Excel 12 のベータ版を入手した人、誰か確認して、教えてください)
実行環境を「決め付けて」コードを書いた側が悪いのか、それともそんな開発環境しか提供してくれない側が悪いのか・・・
一方、Office 12 は、Windows XP 以降でしか動作しません。
これがどれほどの影響を与えるか、ということも楽しみです。
私は個人的に、Office 2000 以降を持っている人が Office 12 に乗り換えるという人は、ほとんどいないのではないか、と想像しています。
新しいPCを買ったら Office 12 がついてきたとか、ボリューム ライセンスで購入している企業が2年後ぐらいに全社的に入れ替えるか、のどちらかではないか、と。
しかし、全バージョンをサポートしていくのも大変でしょうねぇ・・・
|
|