2017-06-14 14 views
2

UserFormチェックボックスを試したことがないので、Userformのチェックボックスをどのように指し示すか分かりません。(Excel Userform)Userformのすべてのチェックボックスがチェックされていることを確認してください。

これは私が現時点で持っているものです....私は知っています、私は知っています、それは完全に間違っています。助けてください?

Private Sub Step1_Confirm_Click() 
    Dim i As Byte 
    Dim Done As Boolean 

    For i = 1 To 4 
     If Step1_(i).value = True Then 
      Done = True 
     End If 
    Next i 

    If Not Done = True Then 
     MsgBox "Please make sure you have done all" 
    End If 

End Sub 

基本的に私が持っている:

  1. AユーザーフォームがStep1_1と呼ばれるIOSP_Acc_R_Approval_Step1

  2. 4チェックボックスと呼ばれます。 Step1_2; Step1_3; Step1_4

  3. 私がいないすべてのチェックボックスがチェックされている場合、ボタンは、エラーを表示したいStep1_Confirm

  4. というボタン - すべてのチェックボックスをチェックする必要があることを意味し....(場合には、私の英語があまりにも悪いです私の意味を伝えるために)

答えて

2

あなたはこれを行うことができます。

  • すべてのチェックボックスがFLを設定することによって確認されていることを前提としていTrue
  • へAGは、すべてのチェックボックスがチェックされたならば、フラグはあなたがまだTrue

で、チェックボックスを反復処理し、1がチェックされていない場合は、ループの最後でFalseして終了

  • にフラグを設定しますMe.Controlsコレクションを使用してチェックボックスを動的に参照し、"Step1_" & iのようなチェックボックスの名前を渡すことができます。

    例コード:

    Option Explicit 
    
    Private Sub Step1_Confirm_Click() 
    
        Dim i As Long '<-- use Long, not Byte 
        Dim blnResult As Boolean 
    
        ' set a flag to assume that it is true that all checkboxes are checked 
        blnResult = True 
    
        ' get the value of each check box 
        For i = 1 To 4 
         If Me.Controls("Step1_" & i).Value = False Then 
          blnResult = False 
          Exit For '<-- skip loop if at least one box not checked 
         End If 
        Next i 
    
        ' check the value of the flag 
        If blnResult = False Then 
         MsgBox "Please make sure you have done all" 
        Else 
         ' all boxes checked ... 
         MsgBox "All checked" 
        End If 
    
    End Sub 
    
  • +0

    ありがとう!今私は何か新しいことを学びました - それはコントロールです! どうすればExit for for .....を忘れることができますか?ありがとう~~~ – herman925

    +0

    ユーザーフォームに他の種類のコントロールがあるとエラーになります。 –

    3

    以下のコードを試してみてください(コメントとしてコード内の説明):

    Private Sub Step1_Confirm_Click() 
    
    Dim i As Long 
    Dim Ctrl As Control 
    
    ' loop through all user_form control 
    For Each Ctrl In IOSP_Acc_R_Approval.Controls 
        If TypeName(Ctrl) = "CheckBox" Then ' check if control type is Check-Box 
         If Ctrl.Value = True Then ' check if check-box is checked 
          i = i + 1 
         End If 
        End If 
    Next Ctrl 
    
    If i < 4 Then ' not all 4 check-boxes are checked 
        MsgBox "Please make sure you have done all" 
    End If 
    
    End Sub 
    
    +0

    はい私は後でこれについて自分自身について考えて、実際にそれを作った。もちろん、あなたのソリューションも機能しました!おかげ – herman925

    +0

    herman925ご@;あなたはロビを受け入れたため、E 'が、歓迎; sの答えを(それはあなたを助けている場合)、あなたは私をupvoteすることができます –

    +1

    私はちょうど 'TypeName'なく' TypeOf'を使用してのためにあなたをupvoted;) – Rory

    0
    Done=true 
    For i = 1 To 4 
          Done = Done*Step1_(i).value 
         Next i 
    if done `then` 
    msgbox "All checkboxes are checked" 
    end if 
    
    関連する問題