Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


43572 / 76732 ←次へ | 前へ→

【38207】Re:クラスの解放を確認したい
発言  ichinose  - 06/5/29(月) 18:08 -

引用なし
パスワード
   こんにちは。
VBAをどこまで信用するかという事のにも関わってきますが。

Help等を見る限り、オブジェクトを参照している変数がなくなれば
オブジェクトに費やしたメモリ・リソースは開放されるとあります。

例えば、クラスモジュールClass1に
'=====================
Const mcnt = 20000
Dim myarray(1 To mcnt)
'=============================
Private Sub Class_Initialize()
  For i = 1 To mcnt
    myarray(i) = i
    Next
   
End Sub
'=============================
Private Sub Class_Terminate()
  Erase myarray()
  Debug.Print "erase"
End Sub


標準モジュールに

'===============================================
Dim mycls1 As Class1
Dim mycls2 As Class1
Dim mycls3 As Class1
'================================================
Sub test()
  Set myclass1 = New Class1
  Set myclass2 = myclass1
  Set myclass3 = myclass1
  Set myclass1 = Nothing
  Debug.Print "1"
  Set myclass2 = Nothing
  Debug.Print "2"
  Set myclass3 = Nothing
End Sub


このtestを実行すれば、イミディエイトには、
"erase"は一度だけ表示されていますよね?
(myclass3にNothingがセットされたときです)
このときにClass1というオブジェクトも開放されたと考えると・・・。


クラス'Cont_Collで

>'Cont_Collが終了するときにColl_Eventで定義したm_Itemを全て開放したい
>'ここが自信ありません。
>Private Sub Class_Terminate()
>Dim i As Integer
>  For i = 1 To m_Coll.Count
     m_item(i),id=i
>    Set m_Item(i) = Nothing
  Next i
End Sub


等としておいて、
クラスColl_Eventでは、


>クラスモジュール"Coll_Event"
>'----------
>'Class名 Coll_Event
>'Collction Eventの意

>Private WithEvents Cont_obj As MSForms.CommandButton
public id as long
>Public Property Let ContItem(ByVal NewCont As MSForms.CommandButton)
>   Set Cont_obj = NewCont
>End Property

>'ここからEvent処理を書く

>Private Sub Cont_obj_Click()
>  MsgBox "クラスモジュールのイベント" & vbCr & Cont_obj.Caption
>End Sub
Private Sub Class_Terminate()
  Debug.Print id
End Sub


などとしておいて正しくTerminateイベントが発生しているか確認してみる

という方法です。

コレクション以外で参照している変数があるとTerminateイベントは
発生しないでしょう?

検討してみてください。

0 hits

【38194】クラスの解放を確認したい ハチ 06/5/29(月) 14:44 質問
【38202】Re:クラスの解放を確認したい 角田 06/5/29(月) 17:39 回答
【38207】Re:クラスの解放を確認したい ichinose 06/5/29(月) 18:08 発言
【38210】Re:クラスの解放を確認したい ハチ 06/5/29(月) 19:13 お礼
【38209】Re:クラスの解放を確認したい ハチ 06/5/29(月) 19:06 お礼
【38211】Re:そういうのは、もう作ってます 角田 06/5/29(月) 19:17 回答
【38213】Re:そういうのは、もう作ってます ハチ 06/5/29(月) 19:29 お礼
【38208】Re:クラスの解放を確認したい neptune 06/5/29(月) 18:46 回答
【38212】Re:クラスの解放を確認したい ハチ 06/5/29(月) 19:19 お礼

43572 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free