[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでラジオボタンの空白がないかチェックする方法 』(towato)
4つのラジオボタンを1グループとして処理しています。
全部チェックされていたら、実行用のマクロへ。(まだ未作成)
1つのグループでも空白があったら、エラーメッセージの表示
【空白があります】と表示をさせたいのです。
まずはエラーのマクロを作成したいため調べ
https://www.239-programing.com/excel-vba/ufm/ufm028.html
上記のサイトが参考になるのかなと思ったのですが、
グループわけのエラーが分からず躓いてしまったため相談させて頂きました。
Private Sub UserForm_Initialize()
'グループわけ
OptionButton1.GroupName = "Agroup" OptionButton2.GroupName = "Agroup" OptionButton3.GroupName = "Agroup" OptionButton4.GroupName = "Agroup"
OptionButton5.GroupName = "Bgroup" OptionButton6.GroupName = "Bgroup" OptionButton7.GroupName = "Bgroup" OptionButton8.GroupName = "Bgroup"
OptionButton9.GroupName = "Cgroup" OptionButton10.GroupName = "Cgroup" OptionButton11.GroupName = "Cgroup" OptionButton12.GroupName = "Cgroup"
OptionButton13.GroupName = "Dgroup" OptionButton14.GroupName = "Dgroup" OptionButton15.GroupName = "Dgroup" OptionButton16.GroupName = "Dgroup"
End sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
>グループわけのエラーが分からず グループわけのエラーとは? (はまちゃん) 2020/10/09(金) 11:58
こんな感じに組めば良いんじゃないですか? ベタだけど。
Dim flg As Boolean
Agroup = Array("OptionButton1", "OptionButton2") Bgroup = Array("OptionButton3", "OptionButton4")
For Each oo In Agroup If Me.Controls(oo) = False Then cnt = cnt + 1 End If Next If cnt = UBound(Agroup) + 1 Then ans = ans & "Agroup " flg = True End If
cnt = 0 For Each oo In Bgroup If Me.Controls(oo) = False Then cnt = cnt + 1 End If Next If cnt = UBound(Bgroup) + 1 Then ans = ans & "Bgroup " flg = True End If
If flg = True Then MsgBox ans & "無選択" End If
変数の宣言は、追加してください。
(Why) 2020/10/09(金) 12:00
UserFormでOptionButtonを使うときは、Frameと組み合わせるといいですよ。
・Frameの中にいれた OptionButtonは、GroupNameプロパティをつけなくても連動します。 ・Frameの中のコントロールコレクションでループできる。 ・Frameでグループ化した Optionボタンを視覚化できる。 ・Frameの枠がうるさかったら、SpecialEffectプロパティで枠を見せなくすることもできる。
Private Sub CommandButton1_Click() MsgBox isCheckedGroupA End Sub
Function isCheckedGroupA() Dim c As Control For Each c In Me.Frame1.Controls If c.Value Then isCheckedGroupA = True: Exit Function Next isCheckedGroupA = False End Function (´・ω・`) 2020/10/09(金) 12:55
>>Why様
ありがとうございます。コード参考にさせて頂きます。
>>(´・ω・`)
詳しく教えて頂き助かりました。早速Frameとあわせて実行してみました。
私の予想通りの動きでとてもうれしいのですが、1つ質問があります。
次の処理へ進むマクロを差し込みたいとおもったのですが(暫定としてRange("A1").Select)
Trueの時にTrueの表示しないようにしたいのですが可能でしょうか?
(towato) 2020/10/09(金) 16:25
質問の意味が汲み取れません >Trueの表示しない どこに表示しているのですか? (´・ω・`) 2020/10/09(金) 17:00
Private Sub CommandButton1_Click()
Dim frmName As Frame
If chkOpButton(Me, frmName) = False Then MsgBox frmName.Caption & "選択漏れあり" Exit Sub '処理を抜ける End If
'次の処理
End Sub
Function chkOpButton(ByRef myForm As UserForm, ByRef myFrame As Frame) As Boolean
Dim c As Control Dim c2 As Control
For Each c In myForm.Controls If TypeName(c) = "Frame" Then For Each c2 In c.Controls If TypeName(c2) = "OptionButton" Then If c2.Value = True Then Exit For End If Next If c2 Is Nothing Then Exit For End If Next
If c Is Nothing Then chkOpButton = True Else Set myFrame = c End If End Function (まっつわん) 2020/10/11(日) 20:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.