0

次のチェックボックスと無線グループのグループがあり、VBAでそれぞれを個別に検証する方法を考えていました。誰かが私を正しい方向に向けることができますか?

たとえば、グループで少なくともチェックボックスを選択する必要があり、各ラジオボタングループ(優先度講義スタイル、roomstrucroomtype)で選択する必要があります。これを実現する方法を示すコードをいただければ幸いです。

-チェックボックス

chk_week1、chk_week2、chk_week3、chk_week4、chk_week5、...、chk_week15

優先度-ラジオボタン

priority_y、priority_n

レクチャースタイル-ラジオボタン

レクチャースタイル_トラッド、レクチャースタイル_セム

Roomstruc-ラジオボタン

Roomstruc_tiered、roomstruc_flat

roomtype-ラジオボタン

roomtype_lecture、roomtype_lab

4

2 に答える 2

1

あなたはこのようなことを試すことができます。フレームの優先度に名前を付けると奇妙な結果が返される可能性があるため、フレームの名前を変更frPriorityしましたfrLectureStyle

Sub cbValidate_Click()
Dim ctl As Control, strOption As String, lLoop As Long

For lLoop = 1 To 15
    If Me.Controls("chk_week" & lLoop).Value = True Then GoTo nxtCheck0
Next

MsgBox "You didn't select a week"

nxtCheck0:

For Each ctl In Me.frPriority.Controls
    If ctl.Value = True Then GoTo nxtCheck1
Next

MsgBox "You didn't select a priority"

nxtCheck1:

For Each ctl In Me.frLectureStyle.Controls
    If ctl.Value = True Then GoTo nxtCheck1
Next

MsgBox "You didn't select a lecture Style"

nxtCheck1:

Unload Me
End Sub
于 2012-10-24T23:58:41.393 に答える
1

グループ内に多くのコントロールがあると面倒になるので、以下のコーディングのようなものを試すことができます。

  1. 「MyForm」という名前のユーザーフォームに「chk01」、「chk02」…。」という名前のチェックボックスを挿入します。chk20または必要な数のチェックボックスを挿入します。

  2. 次の宣言を(フォームモジュールではなく)コードモジュールに入れます

    Public CheckBoxGroup(1 To 20) As New MyForm
    
  3. 次の宣言をフォームコードに入れます

    Public WithEvents ChkBoxGrp As CheckBox
    
  4. フォームアクティブ化イベントで配列を初期化します

    Private Sub UserForm_Activate()
    Dim i As Integer
        For i = 1 To 20 (or however many checkboxes you have
                set CheckBoxGroup (i).ChkBoxGrp = MyForm("chk" + Right("0" + CStr(i), 2))
        Next i
    End Sub
    
    Private Sub ChkBoxGrp_Click()
        Select Case val(Right(ChkBoxGrp.Name, 2))
                Case 1
                ‘Do whaever you want for chk01 box
            Case 2
                ‘Do whaever you want for chk01 box
            ……………
            End Select
    End Sub
    

他のチェックボックスイベントにも同じイベント処理を使用できます

于 2016-08-17T17:17:02.240 に答える