VBA関係

VBAのシステム管理してて困ったこととかサンプルコードとか書いてます。

VBA その辺に転がってるサンプルコードで気を付ける事とか

ウイルスになるようなコードが転がっている…というのを聞いた事はありますが、そういうのは探さないとむしろなさそうです。

 

正直、最近で怖いのはVBA特有のコード省略をフル活用した、短縮コードです。

ぶっちゃけ下記のコードは短くて超便利なんですが、VBA多用してる会社とかだと、複数のVBAを同時に動かしたりして、こういうコードでめっちゃ面倒な問題になることがあります。

Cells(1, "A") = Date

これ、Cellsだけしか書いてないんですが、実はActiveWorkbook.ActiveSheetというめっちゃ長いコードが省略されていて、全部書くとActiveWorkbook.ActiveSheet.Cellsになります。

このActiveWorkbook.ActiveSheetは、今開いているExcelファイルのシートを読み書きするもので、これを使うと、読み書きするシートがリアルタイムで変わってしまいます。

VBAが動いてる途中で別のExcelを開いたりすると、開いたExcelのシートを読み書きしてしまうので、下手すると関数壊しちゃったりします。

 

ちなみにVBAExcelのセルを書き換えた場合、元に戻す機能が使えないので、関数壊しちゃったのを戻したい場合は、保存せずに閉じるしかないです。

保存してなかったら諦めるしかありません。これが結構痛いです。

 

安定した挙動を確保する場合はWorkbooksとかWorksheetsとかでブックとシートを指定することを強くお勧めします。

また、エラーが良く出るVBAはこういう書き方してることが多く、開発者にシステムの挙動が聞けない環境だともう最悪です。

テストで動かす分には省略しても全く問題ありませんが、業務で広く使う場合、他の資料を破壊してしまうので、放置すると割と笑えない未来が待ってます。