2023-02-21

anond:20230221014004

オブジェクト変数Nothing に設定すると、オブジェクト変数特定オブジェクトとの関連付けが解除されます

これにより、変数を変更することでオブジェクトを誤って変更することを回避できます

オブジェクト変数は、関連付けられたオブジェクトを閉じた後に常に Nothing に設定されるため、オブジェクト変数有効オブジェクトを指しているかどうかをテストできます

例:

If Not MyObject Is Nothing Then 
 ' Variable refers to valid object. 
 . . . 
End If 

もちろん、このテストでは、オブジェクト変数が参照するオブジェクトを含むアプリケーションユーザーが閉じたかどうかを絶対に確実に判断することはできません。

マイクロソフトドキュメントには書いてあるんだけどねえ

https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/nothing-keyword

複数オブジェクト変数が同じオブジェクトを参照する場合変数が参照するオブジェクトに関連付けられているメモリおよびシステム リソースは、すべての変数Nothing に設定された後にの解放されます

明示的に Set使用するか、実際のオブジェクトを参照する最後オブジェクト変数スコープ外になった後に暗黙的に解放されます

記事への反応 -
  • 結局勉強は1ミリも進まなかった これ結局「変数参照カウントを0にすることでオブジェクトを破棄終了するような処理をすることはないからNothingの代入はヒステリー」でいいよね CreateObj...

    • オブジェクト変数を Nothing に設定すると、オブジェクト変数と特定のオブジェクトとの関連付けが解除されます。 これにより、変数を変更することでオブジェクトを誤って変更するこ...

      • 実際のオブジェクトを参照する最後のオブジェクト変数が スコープ外になった後に暗黙的に解放されます。 これがあるなら即座にリソースを解放する必要がある時以外、明示的にNothin...

        • 即座にリソースを解放する必要がある時以外の使い道?即座にリソースを解放する必要がある時では?

    • めんどくさいこと考えてるな 仰る通り、外部オブジェクトを生成した場合はその外部オブジェクトにcloseを伝え「なければ後始末になりえない」 Nothingを代入しなければならない例として...

    • へーVBAって全てのオブジェクトが参照カウント方式なんだね c++でshared_ptrしかないって考えると辛そう

    • これ広めてるの誰だよ 変数スコープの概念ないのかよ

    • VBAに限らず、ネット上の非公式のサンプルコードって、基本全部ウソだと思ったほうがいいよ。 そりゃあってるものもあるけど、そんなことで引っかかるなら全部ウソだと思ったほうが...

    • つまりこれは本来「開いたら閉じる」系の外部リソースをループ回し中やエラー中断で開きっぱにして困ってた人が 「変数をNothingにすると(なぜか)症状が改善する!」と発見してそれが...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん