Excel VBA質問箱 IV

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

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


17984 / 76732 ←次へ | 前へ→

【64192】Re:End With
発言  ichinose  - 10/1/24(日) 14:58 -

引用なし
パスワード
   ▼UO3 さん:
こんにちは。



With をアドレッシングだと考えると

クラスモジュール(クラス名Class1)に

Option Explicit
Private Sub Class_Initialize()
  Debug.Print "インスタンス 作成"
End Sub
Private Sub Class_Terminate()
  Debug.Print "インスタンス 消滅"
End Sub


として、

標準モジュールに

'=======================================
Sub test1()
  With New Class1
  MsgBox "Break 1"
  End With
  MsgBox "Break 2"
End Sub

これを実行すると、Break1では、インスタンスが作成され
(作成された証拠に イミディエイトに「インスタンス 作成」が表示)、
Break2では、解放(イミディエイトに「インスタンス 消滅」が表示)されています。


Sub test2()
  With New Class1
  MsgBox "Break 1"
  Exit Sub
  End With
  MsgBox "break 2"
End Sub

このtest2でも 「インスタンス 消滅」が表示されますよね!!
よって、プロシジャー終了時にアドレッシングの解除はされていますね。

が、私の意見としては、原則プロシジャー内の出口は一つでよい
という考え方です(構造化プログラミングでは良く見かける記述です)。
こういう疑問が沸かないように

Sub test()

 With Range("A1")
 
  If .Value = 1 Then
   MsgBox "Error"
  'Exit Sub  '←削除
  Else
   .Value = .Value + 1
  End If
 
 End With
 
End Sub


とするべきだと思いますけどねえ

3 hits

【64189】End With UO3 10/1/24(日) 12:34 質問
【64190】Re:End With kanabun 10/1/24(日) 14:11 発言
【64191】Re:End With UO3 10/1/24(日) 14:53 お礼
【64196】Re:End With YU-TANG 10/1/24(日) 21:41 発言
【64197】Re:End With ichinose 10/1/24(日) 22:08 発言
【64198】Re:End With UO3 10/1/24(日) 22:10 お礼
【64199】Re:End With ichinose 10/1/25(月) 7:59 発言
【64192】Re:End With ichinose 10/1/24(日) 14:58 発言
【64193】Re:End With UO3 10/1/24(日) 15:34 お礼

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