エクセルのユーザーフォームにてトグルボタンを使用しています。
トグルボタンの使用方法は『あり』と『なし』になります。
『あり』を押したときは『なし』を戻して、『あり』を押した状態にし
『なし』を押したときは『あり』を戻して、『なし』を押した状態にすると言うような
標準的な使い方だと思う形にしています。
問題はユーザーフォーム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.2
- 回答日時:
両方を表示したとして2の方を弄って挙動がおかしい時、1のコントロールはどうなってますか?
コピペでコントロール名が同じだからじゃないですかね?
確かExcelは通しで番号はつかなかったような???
No.3
- 回答日時:
No.2です。
初級レベルなジジィですから間違っているかもですが、双方のコードのコントロールの前に
Me.ToggleButton1 ~
としてみるとどうかな?
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 です
お探しの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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォーム上に現在日時...
-
エクセルVBAのフォームを最...
-
ACCESSでストップウォッチの作成
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
ユーザーフォームのテキストボ...
-
フォームウィンドウを最前面に...
-
ブックをCloseまたはQuitで閉じ...
-
クリックイベントなのに、2回ク...
-
MSGBOXのフォント大きさ変更
-
C#で起動時のフォームを非表示...
-
ACCESSのフォーム、開くんです...
-
フォームの位置を取得したい
-
ユーザーフォームのラベルに時...
-
VB.NET/PictureBoxのサイズ
-
Excel VBAで別のブックからユ...
-
VBE ユーザーフォーム重複・空...
-
フォームを画面の下側ぴったり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォーム上に現在日時...
-
Form_Load と Form_Activate の...
-
モーダルフォームとモードレス...
-
Excelにて、ユーザーフォームで...
-
VBAでユーザーフォームを再表示...
-
【VBAユーザーフォームで閉じる...
-
MSGBOXのフォント大きさ変更
-
VBA(エクセル)のユーザー...
-
Hideについて(.NET)
-
エクセルVBAのフォームを最...
-
コントロールの存在確認
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
ユーザーフォームのラベルに時...
おすすめ情報