フォーム上の2つのチェックボタンをトグルさせたいのですが、シート上に設定したコマンドボタンからフォームを表示させると、トグルがうまくいきません。
尚、メニューからフォームを表示させた場合、正しく動作します。
回避させる手段はあるでしょうか?
これはエクセルの仕様なのでしょうか?
Excel2003です(英語版)。英語版Windows7Proです。
フォームのVBA
Private Sub UserForm_Initialize()
CheckBox1.Value = True
CheckBox2.Value = False
End Sub
Private Sub CheckBox1_Click()
CheckBox1.Value = True
CheckBox2.Value = False
End Sub
Private Sub CheckBox2_Click()
CheckBox2.Value = True
CheckBox1.Value = False
End Sub
シートのVBA
Private Sub CommandButton4_Click()
sb_UserForm1Show
End Sub
標準モジュール
Sub sb_MenuCreate()
sb_MenuDelete
Dim myMnu As Object
Dim Cap_P As String
Cap_P = "Prototype"
Set myMnu = CommandBars("Worksheet menu bar").Controls.Add(Type:=msoControlPopup, Before:=3)
With myMnu
.Caption = Cap_P
End With
sb_Menu01 Cap_P, "Delete This Menu", "sb_MenuDelete"
sb_Menu01 Cap_P, "RecoverTest", "RecoverTest"
sb_Menu01 Cap_P, "Clear DataBase", "sb_ClearDatabaseConf"
sb_Menu01 Cap_P, "Show All Data", "sb_ShowAllData"
sb_Menu01 Cap_P, "Remove Autofilter", "sb_RemoveAutofilter"
sb_Menu01 Cap_P, "Add Autofilter", "sb_AddAutofilter"
sb_Menu01 Cap_P, "Remove Sub Total", "sb_RemoveSubtotal"
sb_Menu01 Cap_P, "Add Sub Total", "sb_AddSubtotal"
sb_Menu01 Cap_P, "Load Form", "sb_UserForm1Show"
sb_Menu01 Cap_P, "Import to FishDataBase", "sb_Main01"
End Sub
Sub sb_Menu01(Cont_P As String, Cap_P As String, On_Act As String)
'Menu Create submodule
With CommandBars("Worksheet menu bar").Controls(Cont_P)
.Controls.Add(Type:=msoControlButton, Before:=1).Caption = Cap_P
.Controls(Cap_P).OnAction = On_Act
End With
End Sub
Sub sb_UserForm1Show()
UserForm1.Show
End Sub
No.1ベストアンサー
- 回答日時:
そのような処理に適したオプションボタンがあるにも拘らず
なぜ、チェックボックスを使うのか、ん? という感じではありますが、、、
ま、それは置いといて。。。。
提示のコードではCheckBoxのClickイベントが発生し続けるので
質問の動作は当たり前の動作になります。
Private Sub UserForm_Initialize()
CheckBox1.Value = True ●CheckBox1のClickイベント発生
▼
Private Sub CheckBox1_Click()
CheckBox1.Value = True ●CheckBox1のClickイベント発生
▲
▼~▲のClickイベントが発生し続けるのでストップしているように見えるわけです。
これは、CheckBox1,2のClickイベントの最初に、
MsgBox "box1"など入れてみれば確認できますね。
で、CheckBoxのClickイベントを止めてやればいいわけですが、
UserFormには、Application.EnableEventsなどのメソッドがないので
普通はフラグを使ったりしますが、
今回の場合は、Changeイベントの性質を利用してもできます。
●Changeイベントを使う方法
'--------------------------------------------
Private Sub UserForm_Initialize()
CheckBox1.Value = True
End Sub
'-------------------------------
Private Sub CheckBox1_Change()
CheckBox2.Value = Not CheckBox1.Value
End Sub
'-------------------------------
Private Sub CheckBox2_Change()
CheckBox1.Value = Not CheckBox2.Value
End Sub
'---------------------------------------------
UserForm_Initializeでチェックするのは、CheckBox1だけで十分だと思います。
●また、フラグを使う方法は、Clickイベントの部分で
If Flag = True Then Exit Sub
などとしてClickイベントの処理をジャンプする方法です。
これはご自分で考えてみてください。
最初でも言いましたが、
今回のような処理は、オプションボタンを使うべきかと。
ま、いろいろ理由はあるのでしょうが。。。
以上です。
回答ありがとうございます。
オプションボタンを使わなかったのは、添付写真には写っていませんがもう一組選択箇所があって、オプションボタンが使えないと思い、チェックボタンにしたわけです。
皆様のご指摘の後、調べた結果フレームを使えば何組でもオプションボタンを使えることが先ほどわかりました。
どうもお騒がせしました。
No.2
- 回答日時:
チェックボックスを使って、
オプションボタンと同様の動作を実現したい
というところでしょうか?
ExcelVBA は、あまり得意ではないのですが
力まかせにやってみました。
もっと良い方法があるかもしれません。
Private Sub UserForm_Initialize()
CheckBox1.Value = True
CheckBox2.Value = False
End Sub
Private Sub CheckBox1_AfterUpdate()
If Not Me.CheckBox1 Then
Me.CheckBox1 = True
Else
Me.CheckBox2 = False
End If
End Sub
Private Sub CheckBox2_AfterUpdate()
If Not Me.CheckBox1 Then
Me.CheckBox2 = True
Else
Me.CheckBox1 = False
End If
End Sub
回答ありがとうございます。
オプションボタンを使わなかったのは、添付写真には写っていませんがもう一組選択箇所があって、オプションボタンが使えないと思い、チェックボタンにしたわけです。
皆様のご指摘の後、調べた結果フレームを使えば何組でもオプションボタンを使えることが先ほどわかりました。
どうもお騒がせしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワプロ2018の五稜郭モードで...
-
ドレクエ:現代の海底都市への...
-
ミンサガ いきなり四天王と戦...
-
信長の野望・革新で本能寺の変...
-
信長の野望大志で金ヶ崎の退き...
-
ファイアーエムブレム聖戦の系...
-
wiiのドラゴンボールzスパーキ...
-
FF6 ゾゾ 正直者はどこに?
-
テイルズオブシンフォニアでゼ...
-
太閤立志伝5おすすめ秀吉にて...
-
ソリティアは「毎回必ず」クリ...
-
Windowsゲームのソリテ...
-
メタルギアソリッド3 ステル...
-
カトちゃんケンちゃん攻略法
-
入手の仕方
-
マインクラフトの質問です。 エ...
-
エスカ&ロジーのアトリエについて
-
パワプロ2013
-
ドラクエ7の魔王像の行き方教えて
-
FF7のコレル山への行き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FF(7)でエアリスは、どこで死ぬ...
-
MS Accessでフォームの「開く時...
-
メタルギアソリッド3 独房から...
-
ドレクエ:現代の海底都市への...
-
ミンサガ いきなり四天王と戦...
-
ポアソン分布の連続版(?)
-
ファイアーエムブレム聖戦の系...
-
wiiのドラゴンボールzスパーキ...
-
TOS クラトスルート
-
テイルズオブシンフォニアでゼ...
-
VBAから変更した時だけイベント...
-
PCの三国志11で諸葛亮が何度...
-
これってバグ?(FF8/CC団)
-
PS ワンピース オーシャン...
-
EnableEventsの意味は
-
ロマサガ1のイベントの進め方...
-
信長の野望・革新で本能寺の変...
-
「風雨来記」サブキャラ攻略法...
-
太閤立志伝5おすすめ秀吉にて...
-
学校をつくろう!!校長先生物...
おすすめ情報