• ベストアンサー

VBAでシート上のTEXTBOXの値を変更するとイベントが無限に入る。

ExcelのVBAでシート上に貼り付けたCheckBoxで  内容を変更したくない場合、  下記のようなプログラムを作りました。 Private Sub CheckBox1_Click()     MsgBox "内容を変更しないでください"     If CheckBox1.Value = True Then       CheckBox1.Value = False     Else       CheckBox1.Value = True     End If End Sub すると、イベントが入りまくって、抜け出せなくなりました。 セルの場合は、Application.EnableEvents = False を使用してイベントを止めることができたのですが、 コントロールの場合は、そのような命令が見つかりません。 なにか良い手はないでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 こういうことかな。 (シートモジュールの宣言部に) Private flg As Boolean (イベントプロシージャ) Private Sub CheckBox1_Click()   If Not flg Then     MsgBox "内容を変更しないでください"     flg = True     CheckBox1.Value = Not CheckBox1.Value   Else     flg = False   End If End Sub

Tathuya
質問者

お礼

ありがとうございました。

Tathuya
質問者

補足

ありがとうございます。 割り込みを2度入ることをうまく利用していますね。 これを使わせていただきます。 でも、やはり割り込みを止める命令はないのですね。

その他の回答 (2)

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.2

シートの保護を使えばユーザー操作によるイベントは発生しなくなります。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

Dim blnFlag As Boolean Private Sub CheckBox1_Click()     If blnFlag = True Then       blnFlag = False       Exit Sub     End If     MsgBox "内容を変更しないでください"     blnFlag = True     If CheckBox1.Value = True Then       CheckBox1.Value = False     Else       CheckBox1.Value = True     End If End Sub とか。

関連するQ&A