クラスを利用すれば出来ると思うのですが、知識不足で解決出来ませんでした。
1.フォーム上にCheckboxが20個程あり,その中の”ChkB_すべて”というCheckboxがチェックされた場合、他のCheckboxのチェックを外し、その逆で”ChkB_すべて”以外のCheckboxにチェックが入った場合は”ChkB_すべて”のチェックを外すという処理をしたい。また、”ChkB_すべて”のクリックイベント以外は殆ど同じ処理をしているので簡略化したい。
2.フォーム上にあるCheckboxのチェックの有無を配列に入れたい。
Web上で見つけたクラスの処理を応用しようと思ったのですが出来ませんでした。
宜しくお願いします。
No.1
- 回答日時:
初めまして。
私でよろしければサンプルマクロを組んでみたいと思います。ご希望の節は、貴方様のおやりになりたいことをもう少し詳しく具体的にお知らせ下さい。
お手数をおかけいたしますが、よろしくお願いいたします。
No.2
- 回答日時:
こんにちは。
次のようなマクロを組んでみました。ユーザーフォーム上にチェックボックスを9個配置する。
(チェックボックスのオブジェクト名をCheckBox1~CheckBox9とする。)
・CheckBox1にチェックが入った時、CheckBox2~CheckBox9にチェックが入っていたらすべてのチェックをはずす。
・CheckBox2~CheckBox9のどれかにチェックが入った時、CheckBox1にチェックがついていたらそのチェックをはずす。
フォームモジュールに下記のコードをコピー&ペーストする。
Private Sub CheckBox1_Click()
Dim i As Integer
If Me.CheckBox1.Value = True Then
For i = 2 To 9
If Me.Controls("CheckBox" & i).Value = True Then Me.Controls("CheckBox" & i).Value = False
Next i
End If
End Sub
Private Sub CheckBox2_Click()
If Me.CheckBox2.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox3_Click()
If Me.CheckBox3.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox4_Click()
If Me.CheckBox4.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox5_Click()
If Me.CheckBox5.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox6_Click()
If Me.CheckBox6.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox7_Click()
If Me.CheckBox7.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox8_Click()
If Me.CheckBox8.Value = True Then Me.CheckBox1.Value = False
End Sub
Private Sub CheckBox9_Click()
If Me.CheckBox9.Value = True Then Me.CheckBox1.Value = False
End Sub
>2.フォーム上にあるCheckboxのチェックの有無を配列に入れたい。
同じモジュールシートに下記のコードを記述し、このコードを呼び出して実行させるようにしてみてはいかがでしょうか。
Sub Test
Dim i as integer
Dim myChk(1 to 9) as Boolean
for i = 1 to 9
myChk(i) = Me.Controls("CheckBox" & i).Value
next i
End Sub
>また、”ChkB_すべて”のクリックイベント以外は殆ど同じ処理をしているので簡略化したい。
この件に関してもマクロを呼び出して実行させるようにしてみてはいかがでしょうか。
ご不明な点等がございましたら、ご遠慮なくお知らせ下さい。
返事が遅れ申し訳ありません。
サンプルを作って頂いてありがとうございます。Me.Controlsという使い方があるのを知らなかったので勉強になりました。
ただ、クラスで処理をまとめたかったのでnishi6さんの方を使う事にしました。(処理の分かり易さはこちらなんですけど)
どうもありがとうございました。
No.3ベストアンサー
- 回答日時:
クラスで『擬似コントロール配列?』を作ってみました。
UserForm1にチェックボックスを20個使った例です。
標準モジュールのCBnumにチェックボックスの個数を設定して下さい。
UserForm1に
オブジェクト名=CheckBox1、Caption="ChkB_すべて"
オブジェクト名=CheckBox2
:
オブジェクト名=CheckBox20 を配置しています。
コードを簡略化するために、オブジェクト名は番号順に、
CheckBox1のCaptionを『ChkB_すべて』としてコードを書いています。
オブジェクト名を判定に使うなら少し修正する必要があります。(こちらは非効率でしょう)
ここから
↓
'=== クラスモジュールに貼り付け <Class1> ===
'WithEventsでActiveXコントロールで発生するClickイベントを検知させる
Private WithEvents myChkBox As MSForms.CheckBox
Private myIndex As Integer
'CheckBox型の変数が参照するチェックボックスを設定するための関数
Public Sub SetCheckBox(NewCheckBox As MSForms.CheckBox, Index As Integer)
Set myChkBox = NewCheckBox
myIndex = Index
End Sub
'独自に作ったmyChkBoxのClickイベントを書く
Private Sub myChkBox_Click()
Dim cb As Integer 'チェックボックスカウンタ
If myChkBox.Value = True Then
If myChkBox.Caption = "ChkB_すべて" Then
For cb = 2 To CBnum
UserForm1.Controls("CheckBox" & cb).Value = False
Next
Else
UserForm1.Controls("CheckBox" & 1).Value = False
End If
End If
'チェックボックスの値を配列に入れる
For cb = 1 To CBnum
CBval(cb) = UserForm1.Controls("CheckBox" & cb).Value
'Range("A" & cb) = CBval(cb)
Next
End Sub
'=== フォームのコードウインドウに貼り付け <UserForm1> ===
Dim myCBArray() As New Class1 '配列風にしたチェックボックス
'呼出し時の処理
Private Sub UserForm_Initialize()
ReDim myCBArray(CBnum) As New Class1
ReDim CBval(CBnum) As Boolean
Dim i As Integer 'カウンタ
'クラスの変数がチェックボックスを参照できるようSetCheckBoxを呼び出す
For i = 1 To CBnum
myCBArray(i).SetCheckBox UserForm1.Controls("CheckBox" & i), i
Next
End Sub
'=== 標準モジュールに貼り付け <Module1> ===
Public Const CBnum = 20 'チェックボックスの数
Public CBval() As Boolean 'チェックボックスの値
返事が送れて申し訳ありません。
おかげさまで解決しました。ありがとうございます。処理の動きは完全に把握できていないので、他の処理に応用する時にお世話になる事もあるかと思いますが宜しくお願いします。どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- Access(アクセス) Access の SetFocus について教えてください 5 2022/08/04 07:32
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Excel(エクセル) エクセル会員名簿について。 Yahooメールの連絡先で、AさんCさんにチェックをつけて別のグループに 2 2023/03/27 20:33
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 2 2022/05/04 16:17
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 3 2022/05/04 17:55
- その他(ビジネス・キャリア) アルコールチェック義務化について 1 2022/10/05 17:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
多人数のじゃんけんプログラム
-
C#でフォームのオブジェクト名...
-
Excelで =EMBED("Acrobat Docu...
-
COMコンポーネントって何?
-
Vbで通常使用するプリンターを...
-
bmp画像をjpegやpng画像に圧縮...
-
文字列でクラス型名を取得したい
-
Accessの連結・非連結オブジェ...
-
VBAのWindowオブジェクトとWork...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ArrayLsitのデータ取得
-
Listに格納されているオブジェ...
-
Listに格納されたオブジェクト...
-
JAVAからHTMLへ値を返す方法
-
Visual Studioでのbmpファイル...
-
.getElementById()のエラーにつ...
-
javaでは基本型の参照渡しは無...
-
LISTBOXの内容が更新されま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
vb.net オブジェクト指向につい...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
ビジュアルC++でボタンの有...
-
時間帯判定をする。
-
LISTBOXの内容が更新されま...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Vbで通常使用するプリンターを...
-
戻り値がクラスオブジェクト
-
VBAでvlookup関数から、別シー...
おすすめ情報