
エクセルのユーザーフォームにてトグルボタンを使用しています。
トグルボタンの使用方法は『あり』と『なし』になります。
『あり』を押したときは『なし』を戻して、『あり』を押した状態にし
『なし』を押したときは『あり』を戻して、『なし』を押した状態にすると言うような
標準的な使い方だと思う形にしています。
問題はユーザーフォーム1個目に関しては問題なく上記内容で動くのですが、
それを丸々コピーした2個目のユーザーフォームは『なし』が押された状態から『あり』を押すと
『なし』は戻るのですが『あり』が押した状態になりません。その後『あり』をもう一度押すと
『あり』が押した状態になります。『なし』でも『あり』でも結局はシングルクリック2回必要になっています。
VB自体の構文やボタン名は1個目のユーザーフォームと全く同じにしているのに、1個目は出来て
2個目は出来ないと言うのがよくわかりません。
何か対応策があれば教えていただきたいです。
一応下記にそのVBを載せておきます。
よろしくお願いいたします。
Private Sub ToggleButton1_Click()
If flag = 1 Then Exit Sub
If ToggleButton1 = True Then
ToggleButton1.BackColor = RGB(0, 255, 0)
Else
ToggleButton1.BackColor = "&H8000000F"
End If
Call Test(1)
End Sub
'========================================
Private Sub ToggleButton2_Click()
If flag = 1 Then Exit Sub
If ToggleButton1 = True Then
ToggleButton1.BackColor = RGB(0, 255, 0)
Else
ToggleButton1.BackColor = "&H8000000F"
End If
Call Test(2)
End Sub
'========================================
Private Sub test(ByVal j As Variant)
flag = 1
For i = 1 To 2
If i <> j Then
Controls("ToggleButton" & i).Value = False
Controls("ToggleButton" & i).BackColor = "&H8000000F"
End If
Next
flag = 0
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは、
自己解決へのヒントとしては、
ブレークポイントを作り、ステップ実行で確認してみる事を勧めます。
2回目の時
flag = 1 で代入した値が _Click の flagの値が Emptyになっていませんか?(変数宣言がないと推測してVariantでEmpty)
Emptyなら原因はflagの変数宣言がモジュールレベル変数になっていない為と推測できます。
そのため、If flag = 1 Then Exit Sub で抜けないのでtest(j)が繰り返し呼ばれ、Call Test(1)Call Test(2) (i=1 とi=2) が実行されてしまいます。
あと、両方のボタンに同じコードがありますが、同じ処理で良いのなら
test(j)に入れても良いのではないかと思います。
余談ですが、
面倒でもExcel VBAの場合、エディタオプションの変数宣言を強制するにチェックを入れて使われた方が良いです。
モジュール初めに Option Explicit です
No.3
- 回答日時:
No.2です。
初級レベルなジジィですから間違っているかもですが、双方のコードのコントロールの前に
Me.ToggleButton1 ~
としてみるとどうかな?
No.2
- 回答日時:
両方を表示したとして2の方を弄って挙動がおかしい時、1のコントロールはどうなってますか?
コピペでコントロール名が同じだからじゃないですかね?
確かExcelは通しで番号はつかなかったような???
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Accessで、一つのフォーム画面...
-
VBAのテキストフォームの折り返...
-
エクセルのチェックボックスの...
-
フォームのテキストボックスな...
-
EXCEL VBA ユーザーフォームの...
-
ACCESSのフォーム、開くんです...
-
Microsoft Formsの「個人情報や...
-
ExcelVBAのユーザーフォームでe...
-
フォームを画面の下側ぴったり...
-
クリックイベントなのに、2回ク...
-
テキストボックス入力データの...
-
フォームウィンドウを最前面に...
-
クリックした場所にFormを開く
-
C# formの2重起動禁止
-
コントロールの存在確認
-
LoginForm がないのですが
-
ACCESS VBA ウィンドウを閉じる
-
VBAでユーザーフォームを再表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのテキストボ...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
エクセルのチェックボックスの...
-
エクセルVBAのフォームを最...
-
VB.NETでフォームロード中のエ...
-
EXCEL VBA ユーザーフォームの...
-
VBA(エクセル)のユーザー...
-
【Excel VBA】ユーザフォームを...
-
Hideについて(.NET)
-
(Excel+VBA)ユーザーフォームの...
-
モーダルフォームとモードレス...
-
VBA コンボボックスとテキスト...
-
アクセス2013 フォームが...
おすすめ情報