MW211 EXIT

devlog
ExcelVBA/ActiveXコントロールのイベント抑止
2018年06月28日
イベント自体の抑止はできないようなので(「Enabled=False」とかでも発生)、
イベント内でフラグ等で制御する他ないようだ。

まず、肝心のシートイベントにて、以下のように設定する。
┌──────────────────────────────────────┐
│Public mIsイベント抑止 As Boolean                                           │
├──────────────────────────────────────┤
│Private Sub ComboBox表示行数_Change()                                       │
│    If mIsイベント抑止 Then                                                 │
│        Exit Sub                                                            │
│    End If                                                                  │
│    Call 処理実行                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
グローバル変数でも構わないが、せっかくなのでシートのメンバ変数で制御する。

初期化については、コンストラクタ的なものの記載を試みてもよいかもしれないが
ブックイベントがあるので「ThisWorkbook.cls」の初期化処理にて行う。
┌──────────────────────────────────────┐
│Private Sub Workbook_Open()                                                 │
│    シート.mIsイベント抑止 = False                                          │
│End Sub                                                                     │
└──────────────────────────────────────┘

後は、マクロ処理にて、事前にイベント抑止を宣言してから値を変更してあげればよい。
┌──────────────────────────────────────┐
│    With シート                                                             │
│        .mIsイベント抑止 = True                                             │
│        .ComboBox表示行数.ListIndex = インデックス                          │
│        Call 処理実行                                                       │
│        .mIsイベント抑止 = False                                            │
│    End With                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA