Excel 2010 でフォーム コントロールなどの Enabled プロパティを False に設定しても、登録されたマクロが実行される

適用対象: Excel 2010

現象


Microsoft Excel 2010 で、フォーム コントロールおよび埋め込みオブジェクトの Enabled プロパティを False に設定しても、登録されたマクロが実行されます。

原因


この現象は、Excel 2010 から描画オブジェクトの機能拡張に伴い実施された仕様変更の結果、Enabled プロパティによるマクロの実行を抑制することができなくなったために発生します。

回避策


この現象を回避するには、以下の例のように、処理の冒頭にマクロが実行されないよう制御文を追加してください。
Sub ボタン1_Click()
' ----- 回避策 : ここから -----
If Sheets("Sheet1").Buttons("ボタン 1").Enabled = False Then Exit Sub
' ----- 回避策 : ここまで -----
MsgBox "ボタン 1 がクリックされました"
End Sub

状況


この動作は仕様です。

詳細


問題の再現手順

  1. Excel 2010 を起動します。
  2. [開発] タブの [挿入] をクリックし、[ボタン (フォーム コントロール)] を挿入します。
  3. [マクロの登録] で [新規作成] をクリックします。
  4. 標準モジュールに以下のマクロを入力します。
    ' ボタンのクリックイベント
    Sub ボタン1_Click()
    MsgBox "ボタン 1 がクリックされました"
    End Sub

    ' ボタンを非活性化
    Sub SetDisable()
    Sheets("Sheet1").Buttons("ボタン 1").Enabled = False
    End Sub

    ' ボタンを活性化
    Sub SetEnable()
    Sheets("Sheet1").Buttons("ボタン 1").Enabled = True
    End Sub
  5. マクロ "SetDisable()" を実行して、[ボタン 1] を非活性化します。
  6. [Sheet1] へ戻り、[ボタン 1] をクリックします。

結果

ボタン1_Click() が実行されます。