2010年12月8日水曜日

UserControl プロパティの謎

最近、次のような Excel オートメーションのコードを見かけました(一部抜粋)。

'Only XL 97 supports UserControl Property
On Error Resume Next
oApp.UserControl = True

あれ? と思った方、きっと私以外にもいますよね。
そう、UserControl プロパティは Excel 2000 以降でもふつうにサポートされているので、上のコードは必然性がよく分からないのです。コメントも間違っているように見えますし。

念のため、調べてみました。

Office オートメーション サーバーの GetObject および CreateObject の動作

上記 MSKB の中に、次のような一節があります。



やはり、少なくとも Excel 97 から 2007 までは UserControl プロパティがあります。Microsoft の公式技術情報にそう書いてあるのですから、間違いはないでしょう。

では、私が見かけたコードの作者が何か勘違いしただけなのか、とも思ったのですが、そのコードを投稿した方は Web 上からコピーしたようなことを書いています。たしかに、コメントが英語ですから、日本人の誰かが書いた可能性は低いと思われます。
ということは、この謎のコードが世界中に拡散している可能性があるのでしょうか?

ググってみました。


なんと 16,300 件
あまりにも多いので、どれが最初のソースなのか特定できません。
しかし、少なくとも西暦 2000 年にはすでにこのコードが存在していて、十年後の今もコピペ増殖中なのは確かです。
これはいったいどういうことでしょうか。

私は Excel に詳しくないのでよく分からないのですが、何か Excel 特有の事情があって、あのような記述になっているのでしょうか…。
真相をご存知の方は、コメントで教えてください。


2010/12/17 追記:
熊谷隆史さんのコメントで、謎が解けました。ありがとうございます。
犯人出典元は、なんと Access コマンドボタン ウィザードが自動生成するコードでした。


自分はふだんウィザードをまったく使わないので、気づきませんでした。

おそらく意味的には、Excel 95 (UserControl プロパティが無い) を考慮したコードと思われます。
コメントが「XL 97」と決め打ちされているのは、これが Access 97 時代、つまり Excel 97 が最新だった時代に書かれたコードだからですね、きっと。以来まったくメンテナンスされずに使いまわされているのでしょう。
その時代であれば、たしかにこのコメントにこのコードで意味が通ります。
2010 年にこれをそのまま使うのは、ちょっとどうなのという気もしますが、ウィザードですから文句を言っても仕方が無いですね…。

0 件のコメント:

コメントを投稿