2017-06-14 4 views
2

Habe noch nie UserForm-Checkboxen ausprobiert, daher weiß ich nicht einmal, wie ich auf die Checkboxen in einem Benutzerformular zeigen soll.(Excel-Benutzerformular) Überprüfen Sie, ob alle Kontrollkästchen in einem Benutzerformular aktiviert sind.

Dies ist, was ich im Moment habe .... und ich weiß, ich weiß, es ist völlig falsch. Bitte helfen Sie?

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 

Grundsätzlich habe ich:

  1. ein Benutzerformular IOSP_Acc_R_Approval_Step1 genannt

  2. 4 Ankreuzfelder Step1_1 genannt; Step1_2; Step1_3; Step1_4

  3. eine Schaltfläche namens Step1_Confirm

  4. Ich möchte die Schaltfläche Fehler anzuzeigen, wenn nicht alle Kontrollkästchen aktiviert sind - was bedeutet, dass alle Kontrollkästchen zu prüfen haben .... (falls mein Englisch zu schlecht zu vermitteln, was ich meine)

Antwort

2

Sie können dies tun:

  • davon ausgehen, dass alle Kontrollkästchen, indem ein fl geprüft ag True
  • iterieren die Kontrollkästchen, und wenn man nicht gesetzt geprüft wird, um die Fahne zu False und Ausfahrt
  • am Ende der Schleife, wenn alle Kontrollkästchen dann das Flag noch überprüft wurden, ist True

Sie Sie können sich dynamisch auf die Kontrollkästchen beziehen, indem Sie die Me.Controls Sammlung verwenden und den Namen des Kontrollkästchens wie "Step1_" & i übergeben.

Beispielcode:

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

Dank! Jetzt habe ich wieder etwas Neues gelernt - es ist .Controls! Und wie könnte ich über Exit For vergessen ..... danke ~~~ – herman925

+0

Sie erhalten Fehler, wenn es andere Arten von Steuerelementen auf dem Benutzerformular gibt. –

3

den Code Versuchen Sie unten (Erläuterungen in den Code als Kommentare):

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

Ja, ich habe später selbst darüber nachgedacht und es tatsächlich geschafft. Und natürlich hat deine Lösung auch funktioniert! Danke – herman925

+0

@ herman925 Ihr; e willkommen, da Sie Robi angenommen haben; s Antwort, können Sie meine (wenn es Ihnen geholfen hat) upvote –

+1

Ich habe Sie nur für die Verwendung 'TypeName' und nicht' TypeOf' updated;) – 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 
Verwandte Themen