C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Excelのマクロ2

こちらの続きです。
Excelのマクロ - C#ATIA

続きって程でもないんですけどね。


結局、最初の納期には間に合わず、断念。
次のデータを待っている間に突貫で作りましたが、あまりに
特定の客先向けなので、公開出来ません。(本音は恥ずかしい)

結局作ったのは、ExcelのBookを2つ開き、CATIAのファイルを扱うという
何とも面倒なものとなりました。
CATIA側は大した処理は無いのですが、Excelに苦戦。5:1ぐらいの比率で
手間がかかりました。コード的にはちっともExcelっぽくないはず。

苦しんだ理由の一つが、2つのBookを扱っていたので、「Cells」とか
機能するのですが、「お前、何やつ?」(どっちのBookのやつ?)とか
迷っちゃいます。
CATIAだとDocumentから丹念に下りて行って取得するのですが、いきなり
「Cells」とか「Rows」とかだとビックリしちゃいます。
(人によっては便利と感じるのでしょうが・・・個人的にはスコープのでかい
変数がドカンって置かれているようで不気味です)

もう一つがコレクション。必要なセルを読み取ってかき集め・・・と言うのを
何度か行わなきゃならなかったのですが、後の処理を考えると辞書(ディクショナリ)
が欲しかったんですよ。VBAのコレクションはキー付きでの格納が出来て
単なるコンテナより呼び出しが速かった事を覚えていたので、コレクションを
辞書としてコード書き始めたんですが、コレクションの代入って

Collection.Add value, key

なんですね。 もう違和感しかなかったです。(途中で間違えたし・・・)
確かにKey無しでも使えるのを考えると、key側はオプション引数だから
前にはもっていけないんだろうなぁ とは、変な納得はしました。

後はキーの重複を避ける、isExistのようなものが無いんですね。
「On Error Resume Next」使いながら逃げましたよ。

でも2/3ぐらいまで書いた上で事件が。
コレクションはvalueの列挙は出来るのですが、keyの列挙って出来ないですよね?
ちょっと検索したけど見つかりませんでした。keyの列挙って需要無いこと無いと
思うのですがねぇ。

結局、愕然としながらScripting.Dictionaryに書き換えました、涙流しながら。
2度とコレクションを辞書としては使わない と決めました。



40個ぐらいモジュールがあって、全て「Option Explicit」無しで、スコープの
デカい変数がいっぱいあって、ほとんどの関数がPublicで、定数が全くなくて、
10個弱のクラスモジュールがあって、中身はプロパティぐらいでメソッド
ほぼ無しで、コメント化された古いコードが半分ぐらいあったので、
読み解くモチベーションが出てこなかったです。

出来上がったものは満足出来ていないので、最低限にすらちょっと足りない
レベルですが、多少の変更にもコードを修正しないでシートの値を修正する
だけで対応出来るようにしたし、オリジナルより処理が速いはず。