Visual Studio のような開発環境がなく、FTPでデータを取得する必要があったときのこと。


最初にHSP3 を使ってみた。プログラミングは簡単だったのだが、FTPファイルサイズが大きいと途中から転送速度が極端に落ちた。理由は分からないが、これは運用には向かないので断念した。


次にVBAからDOSのFTPをコールしてみた。さすがに歴史があるのか、高速である。しかし、DOS窓を最小化したりすると速度が遅く、やはりこれも実用には耐えなかった。これはDOSのプライオリティを上げればよかったのかもしれないが、客先の設定は触れなかったので止めた。


最後に「VBAによるTCP/IPプログラミング入門」 を入手し、どれが最適かを検討したところ、ActiveX追加などの環境変更を伴わなくて済む、WinInet API を利用した。これは速度、ユーザーからの隠蔽を両立でき、これを使うことにした。



VB.netではフレームワークに通信関数があるため、この本を利用する必要は無いが、その後別件でHTTP、HTTPSのプロトコルでもWinInet API は役に立ったし、VBでも利用できた。


あれれ、書いていたと思ったが書いていなかったようです・・。

(もし書いていたら訂正します)


VBAを編集しているとファイルサイズが不思議と大きくなることがあります。

で、解消方法としていくつかありますので列挙しておきます。ただし、たまにもっとファイルサイズが大きくなったり、効果がないこともありますので・・。


・モジュールを解放(エクスポートすること)し、インポートし直す。

・プロジェクト名を変更し保存する(VSS使用時はまた元に戻すこと)。

・バージョンの異なるExcelで保存する。ただしバージョンによっては非互換があるので、サービスパックのレベルが違うExcelで保存の方が無難かな。


プロジェクト名の変更は昨日たまたま見つけました。ファイルサイズが半分になり、起動速度も相当改善されました。ただ、2つ試したうちの片方だけ。もう片方は全く効果なしでした。


Debug.Print の出力結果はイミディエイト ウインドウに出力される。テスト時にログを出力して性能ボトルネックを確認したりするのに結構使っている。
この結果をテキストファイルにコピーしようとしたら、なぜかコピーできないことがあった。右クリックしても編集系のメニューは選択できない。


このとき、プロジェクトをロックしたままであったことに気づき、もしやと思いロックを解除すべくパスワードを入力すると見事編集可能となった。
気持ちは分からなくも無いが、そこまで保護しなくても、という気もする。


また、複数のブックのプロジェクトがロックされていた場合で、1つだけロックを解除したら、どのブックで出力したか関係なく編集可能となった。
こういう仕様はあまり意味が無いように思う。