2017-10-15 6 views
-1

J'utilise Ms Access et un formulaire avec 10 cases à cocher et un bouton. L'utilisateur peut vérifier de 1 à 10 cases à cocher. Chaque case à cocher représente un mot. J'ai besoin d'un code pour boucler toutes les cases à cocher de 1 à 10 et pour me donner une chaîne de caractères afin que je puisse l'analyser en un module.Convertir toutes les cases en une seule chaîne

Private Sub cmdOK_Click() 
Dim str1, str2, str3, str4, str5 As String 
Dim strString As String 

If chB1 = True Then 
str1 = "111 - " 
End If 

If chB2 = True Then 
str2 = "222 - " 
End If 

If chB3 = True Then 
str3 = "333 - " 
End If 

If chB4 = True Then 
str4 = "444 - " 
End If 

If chB5 = True Then 
str5 = "555 - " 
End If 

strString = str1 & str2 & str3 & str4 & str5 & Date 
Debug.Print strString 

End Sub 

Je suis en train de le faire maintenant. Puis-je le faire d'une autre manière? Toute aide?

Merci d'avance.

+0

Si 'CheckBox1' est cochée, sa valeur sera'on'. Si sa valeur est 'True', vous voulez concaténer son' Caption' dans votre chaîne de résultat. Continuez avec 'CheckBox2'. Sur quelle partie êtes-vous coincé? –

+0

Ajouter un code. Puis-je le faire avec une boucle. – YvetteLee

Répondre

3

Demandez à chaque contrôle CheckBox ont la chaîne associée quelque part - pourrait être son Caption, pourrait être son Tag, quel que soit - vous avez besoin d'un moyen d'obtenir cette chaîne de la case à cocher lui-même, si vous voulez éviter d'avoir à coder en dur il .

Ensuite, vous pouvez itérer vos cases à cocher, et avec un tableau dynamique que vous redimensionnez au nombre de cases cochées, vous pouvez stocker les chaînes associées dans chaque index de tableau.

Dim items(), itemCount As Long 
Dim ctrl As MSForms.Control, chkBox As MSForms.CheckBox 

For Each ctrl In Me.Controls 'iterate all form controls 
    If TypeOf ctrl Is MSForms.CheckBox Then 'only care for checkboxes 
     Set chkBox = ctrl ' type cast to the MSForms.CheckBox interface 
     If chkBox.Value Then 'only care for checked checkboxes 
      itemCount = itemCount + 1 
      ReDim Preserve items(1 To itemCount) 
      items(itemCount) = chkBox.Tag 'or whatever you've mapped the strings to 
     End If 
    End If 
Next 

Ensuite, vous pouvez joindre les éléments du tableau avec ce séparateur que vous souhaitez utiliser, avec la fonction VBA.Strings.Join:

Debug.Print Join(items, " - ")