週末に昔の仲間と水道橋で飲んだ。

4人とも大学を出てある会社に入ったのだが、私だけスピンアウト。後の3人は元の会社でがんばっているそうだ。

その一人が、会社の技術表彰を結構受賞するらしい。今年は特別賞を取ったとか。それも、本来は最優秀賞モノだそうだが、その友人に最優秀賞が何度も受賞、というのを避けるための措置だったらしい。

聞くと、そのうちのひとつはAjaxなどという言葉が出る以前から同じようなことをやりたくていろいろ試していたらしく、IEの5.5で「やっとできる」と実装したそうだ。本人いわく、特許でもとってればよかったかな、とか。

他にも面白いアイデアで賞を取り、そのアイデアの実装が最近はアジアに結構売れているらしく、中国やら東南アジアに出張によく出かけているようだ。

 

で、私のAjaxの印象は「メンテが大変では?」だったが、彼は「どこをどうするか、という作法を決めているから大丈夫」と言っていた。実際、大変なのを経験して、作法を確立したそうだ。

 

たかだかVBAの作法で、こんなに長期間うだうだと書かず、もっと成果のある情報を書かねば、といい刺激を受けた。

確か以前、問題なく実装した覚えがあるのだが・・。気のせいだったのかも。


どういうことをうやったかというと、


 1. クラスモジュールを配列で定義・内容はデータで、PropertyのGet/Setを定義している

 2. ReDim Preserve で1つづつ要素を追加し、追加するごとに New する

 3. 追加した要素に、ファイルから読み込んだ情報をセットしておく


である。


コードの断片としては


' 1. -------------------

Private clsTempInf() As ClassData_Log

 

' 2. -------------------

miTempCnt = miTempCnt + 1
ReDim Preserve clsTempInf(miTempCnt)
Set clsTempInf(miTempCnt) = New ClassData_Log

' 3. -------------------

Set clsTempInf(miTempCnt) = clsLogic.execAnalyze(sBuf)

てな感じである。


で、後で内容を確認すると、どうも内容がおかしい。よくよく見ると、配列の要素が全て同じ情報になっているのだ。


ステップ実行で確認すると、2.を実行し終えた時点では追加された要素は空である。が、3.の中を見ていくと、最後の要素しか塗り替えていないはずなのに、同時に他の要素の内容が塗り変わってしまっている、という事象であった。


なんかボケたことをやっているのかもしれないが、急いでいたのでやむなく別の方法、配列に溜めるのではなくデータベースに出力する方法で逃げることにした。


自分のコードバグなのか、言語上の制約なのか、など、そのうち他のケースも試して確認したいと思う。


パソコンでできることもちょっと紹介してみようと思う。


 


Windowsパソコンには「Windows Media Player」というソフトがインストールされている。これを使えばCDを聴くことができる。スピーカー内蔵なら聞こえるように設定する。私のデスクトップはスピーカーを接続していないのでヘッドホンで聴いている。


 


こんなようにCDのタイトルが表示され、マウスでクリックすれば該当の曲を再生できる。

VBA 作法/コーディング規約 集約中 ( Excel Access 他)


 


参考まで、笠置シズ子の「おさんどんの歌」再生中の画像。


 


CDは、その昔DADと呼ばれていた。Digital Audio Disc の略だ。つまりはデジタルデータである。つまりはCDをハードディスクに保存して、別のCDを作る、ということも技術的には可能である。が、著作権上やってはいけない。