MENU

As New について

VBAでもオブジェクト変数の宣言と同時にインスタンス化することができます。

Dim objHoge As New clsHoge

知らなかった人も多いと思いますが、実は、知らなかったほうが良かったかもしれません。

というのも、実はVBAの「As New」は「特殊」で、下記の2つは全く同じというわけではないのです。

Dim objHoge As clsHoge
Set objHoge = New clsHoge
Dim objHoge As New clsHoge

VB.netを知っている人であれば、両者は確実に同じものと思い込んでいることでしょう。実際、私もそうでしたから。

実際には、この構文は、変数を参照した時点でNothingだったら、自動でNewしてくれるというものなのです。

この振舞のどこが問題なのか?

下記のサイトで、「As New」の振舞い、どうして「As New」を使ってはいけないのか詳しく解説されています。

t-hom’s diary
VBA オブジェクト変数の宣言時にNewすると何がまずいのか - t-hom’s diary オブジェクト変数の宣言と使用については、以下の2パターンが存在する。■パターン1 宣言と同時にNewしてしまう方法 Dim C As New Collection■パターン2 宣言とオブジェクト...

これを読むと「As New」は決して使ってはいけないものだということがよく分かります。

宣言と同時にインスタンス化を行う(ように見える)As New は決して使ってはいけない。
この構文は、変数を参照した時点でNothingだったら、自動でNewしてくれるというもの。
一見便利なこの振舞のどこがいけないか?というと、明示的にNothingを代入した後に、思わず変数を参照してしまうと、本来はNothingエラーとなるべきところがそうならず、エラーの温床となってしまう可能性があること。

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる