最近ちょっと調べものをしているときに、おもしろいファイルを見つけた。
Microsoft Office2000をインストールすると、標準なら C:\Program Files\Microsoft Office\Office\Samples に作成される、「SAMPLES.XLS」である。
エクセルの機能についての基礎的なところからかなりマニアックな話題までのネタモトがつまっているようなファイルだ。
で、このファイルに、ちょっとおもしろい仕掛けがしてある。
実は、このファイルのエクセルシート、[Ctrl] + [PgDn] で次のシートを探すということをくり返している限り、いつまでたっても終わりがないのだ。
新しいファイルを見ると、どんなシートがあるのか確認しようと思って [Ctrl] + [PgDn] を連打していってどんなシートが入っているのかひととおり見る習慣があるのだが。
100回くらいやったつもりになってもいっこうにいちばん右のシートとおぼしきところに到達せず、そこでようやく(?)と思った。
で、見てみると。
いちばん右のシートに、そのシートが選択された瞬間に実行されるマクロが入っていた。
Private Sub Worksheet_Activate()
Worksheets("目次").Activate
End Sub
このマクロ、何をしているのかというと、すべてのシートの中の、いちばん左のシートに移動している。
ということで、どうやら、以下のからくりの現象が起こっていたようだ。
1 いちばん左のシートから、次々に右のシートを見にいっている
2 いちばん右のシートに到達すると
3 いちばん右のシートに入っていたマクロが実行され
4 一瞬の間にいちばん左のシートに移動してしまい
5 それに気がつかず、塾長は、ひたすら右のシートに移動するということをくり返していた
6 その後も、いちばん右のシートに到達する都度、いちばん左のシートに自動的に移動していた
ということだ。
永久ループだ(w
「なんで、そんな迷路みたいなトラップがあるんだ (@_@; 」といぶかしく思った。
いちばん左のシートに移動したければ、そのくらいのことは自分でやるから勝手にやらないで欲しい。
かつ、そういうイベント駆動型のマクロを実行するなら、せめて、それを実行したと分かるようにして欲しい。
そんなことを思った。
マクロを書くときには、利用者を永久ループに陥れないようにしましょう(w