VBA初心者の新人プログラマーです。
VBAのSet 変数 = Nothingの対象とタイミングをご教示ください。
①Set 変数 = Nothingの対象
変数に対して、処理後にメモリ解放が必要とざっくり理解しております。
変数の中でも「参照を行っている変数」に対して必要とのことですが、その判断はコードの作り次第なのでしょうか?
例として、下記コードを作成しました。質問箇所のご確認をお願いします。
VBA
1'変数の宣言 2Dim ws_sheet1 As Worksheet 3Dim str_name As String 4Dim str_kaisya As String 5Dim cn As Object 'ADO接続に使用する変数 6Dim rs As Object 'ADO接続に使用する変数 7 8On Error GoTo myError 9 10'変数のset 11Set ws_sheet1 = Worksheets("明細") 12Set str_name = ws_sheet1.Range("A1").Value 13Set str_kaisya = "TEST会社" 14 15'ADO接続・処理箇所は省略します 16rs.Open '省略... 17cn.Open '省略... 18 19rs.Close 20cn.Close 21 22'●●●●質問箇所●●● 23'解放が必要と思われる変数 24Set ws_sheet1 = Nothing 25Set rs = Nothing 26Set cn = Nothing 27 28'解放が必要でしょうか? 29Set str_name = Nothing 30Set str_kaisya = Nothing 31 32myError: 33'解放が必要と思われる変数を記載 34MsgBox "エラー" 35Exit Sub 36 37End Sub
②Set 変数 = Nothingのタイミング
End sub直前にメモリ解放を必要性はあるのでしょうか?
まず自身のメモリ解放についての認識ですが、誤りがある場合ご指摘をお願いします。
参照範囲が大きい変数は、処理毎に解放を行う必要があり、End subで暗黙的にメモリ解放が行われる認識です。
上記コードのように参照範囲が大きくなく、プロシージャ間の受け渡しがない場合、メモリ解放は必要でしょうか?※ADOのObjectはほとんどの場合において必要との認識です。
ネットで調査したところ、「End sub直前は不要」「エラー発生時等の保守性を考慮して書いておくべき」と双方のご意見があるようです。
以上です。
> 新人プログラマーです。
先輩に確認するのが良いかと思います。御社のコード規約に従えば良いのではないでしょうか?

回答ありがとうございます。まずコード規約につきまして、弊社ではVBA開発実績がないため、規約も特にありません。そのため一般的な規約に沿ったものを開発する方針です。
また開発実績のある先輩がおらず、触れたことのある先輩に確認をしましたが、よく分からないままの現状で困っています。以下確認した結果です。
○メモリ解放の対象→(回答)オブジェクト変数
○メモリ解放のタイミング→(回答)End sub前に必要 ※VBAの慣例だから

回答3件
あなたの回答
tips
プレビュー