エクセルVBAについての質問です。

ワークシートにアクティブXコントロールのオプションボタンを配置しました。
そのうちの1つをクリックすると既定のユーザーフォームが表示されるようにしたいと思っています。
クリックする対象は既に選択されている(●になっている)ボタンを含みます。
参考になるコードをご紹介ください。
お願いします。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2010/07/24 21:18:23
  • 終了:2010/07/25 03:42:11

回答(1件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692010/07/24 22:00:28

ポイント60pt

オプションボタンの場合既にチェックが付いていると、

クリックしてもイベントが発生しないのが問題になるようです。

そこで、チェックボックスはクリックするたびにイベントが発生するので、

チェックボックスをオプションボタンと同じ動作するようにしてしまえば

一応同じ機能が実現できます。

まあ、○が□になるという難点がありますが。


例えばチェックボックスを3つ用意したとして、

標準モジュールの先頭に

Public blnEnable As Boolean

シートモジュールに

Private Sub CheckBox1_Click()
    If blnEnable Then Exit Sub
    blnEnable = True
    CheckBox1.Value = True
    CheckBox2.Value = False
    CheckBox3.Value = False
    Application.EnableEvents = True
    blnEnable = False
    
    UserForm1.Show
End Sub

Private Sub CheckBox2_Click()
    If blnEnable Then Exit Sub
    blnEnable = True
    CheckBox1.Value = False
    CheckBox2.Value = True
    CheckBox3.Value = False
    blnEnable = False
End Sub

Private Sub CheckBox3_Click()
    If blnEnable Then Exit Sub
    blnEnable = True
    CheckBox1.Value = False
    CheckBox2.Value = False
    CheckBox3.Value = True
    blnEnable = False
End Sub

こんな感じにコードすれば、チェックボックスをオプションボタンと同じ動作にして

既にチェックされている場合でもフォームを表示できます。

http://q.hatena.ne.jp/

id:wayan

そうですか。オプションボタンは既にチェックが付いていると、クリックしてもイベントが

発生しないのですか。

いや、実はオプションボタンの数も好きなだけ追加できるようにも考えておりまして、そうするとご紹介

頂いた方式のコードにはどのように応用すればよろしいでしょうか。

「オプションボタン名」に変数などが使えるものなのでしょうか。

また、既にチェックが付いていることでの不都合は都度オプションボタンをクリアする(全部○にする)

ことで対応が可能なのでしょうか。

重ね重ねの問い合わせで恐縮ですがよろしくお願いします。

2010/07/24 22:27:25
  • id:SALINGER
    まず、7行目の
    Application.EnableEvents = True
    が、削除し忘れた余分な行でした。
     
    >実はオプションボタンの数も好きなだけ追加できるようにも考えておりまして
    ExcelはVB6と違って普通コントロール配列を使ってイベントを共通化できないので
    コントロールが増えればそれだけイベントを書かなくてはいけなくなります。
    ある程度は関数にして簡略化はできますが。
    ※面倒ですが一応クラスモジュールを使ってコントロールを配列にすることはできます
    http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
     
    >既にチェックが付いていることでの不都合は都度オプションボタンをクリアすることで対応が可能なのでしょうか。
    可能ですが、オプションボタンは視覚的にどの項目を選択したかを、
    わかりやすくするものなので、都度クリアしては意味が無いように思います。
    それならば、全部ボタンにして最後に押したボタンの色を変えるとかの方法もあります。
  • id:SALINGER
    すいません。大嘘を書きました。
    Clickイベントは発生しなくても、MouseDownイベントでいいので次のように書けばよかった。
    >>
    Private Sub OptionButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    OptionButton1.Value = True
    UserForm1.Show
    End Sub
    <<

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません