Access VBA - Comment puis-je avoir une boucle en VBA qui me permet de faire une boucle par le contrôle des noms de
J'ai environ 10 zones de texte dans un formulaire qui sont effectivement utilisés pour l'affichage de ne pas l'entrée. Ils sont nommés txt_001_Name
, txt_002_Title
, etc..ce genre de boucle est utilisée pour cela.
Ce genre de VBA dois-je utiliser pour effectivement boucle à travers les noms des zones de texte? Donc, si j'étais à déboguer.l'impression qu'il pourrait ressembler:
txt_001_Title
txt_002_Title
txt_003_Title
C'est probablement assez simple à faire - d'autant plus de raison que je doit apprendre comment!
EDIT: Désolé, j'aurais dû être plus explicite à ce sujet.
En raison de la ci-dessus convention de nommage, je suis à la recherche d'itérer à travers ces zones de texte de sorte que je peux faire quelque chose avec chaque. Ce que chacun de ces 10 zones de texte en fait représentent des valeurs numériques, chacun ayant une instruction SQL derrière eux dans la forme du onload
événement. J'ai également une autre série de dix qui détiennent des valeurs numériques qui sont beaucoup plus statiques, et enfin un autre dix qui utilisent une expression de simplement diviser chacune des dix premières, à l'encontre de la relative "deuxième" dix, et la fin de la valeur dans la relative 3. Donc, fondamentalement, il finit par ressembler à un tableau de bord de la table.
'first ten' 'second ten' 'resulting ten'
---------------------------------------------------
txt_001_value txt_001_calc txt_001_result
txt_002_value txt_002_calc txt_002_result
etc.
Donc en fait je veux l'utiliser pour le 'résultat' des zones de texte. Je veux faire une boucle par les dix premiers et d'effectuer une simple calcul:
me.txt_001_result = me.txt_001_value / me.txt_001_calc
Toutes les conventions de nommage "match up", donc je peux taper manuellement les 10 lignes ci-dessus, mais je suis sûr qu'il ya une meilleure façon (en boucle), et je devrais l'apprendre.
OriginalL'auteur Justin | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez lister les noms de contrôles de zone de texte avec une procédure simple comme ceci:
On pourrait appeler cela de l'événement Load du formulaire:
Cependant, je ne comprends pas ce que vous essayez d'accomplir. Je me rends compte que vous voulez faire quelque chose avec ctl.Nom autres que
Debug.Print
, mais je ne sais pas ce que c'est.Plutôt que le calcul d'un résultat pour moi.txt_001_result puis en attribuant une valeur à la zone de texte, définissez la source de contrôle pour txt_001_result à txt_001_value /txt_001_calc et de laisser l'Accès de mettre la bonne valeur dans txt_001_result pour vous.
En réponse à vos commentaires, je vous suggère cette procédure comme un point de départ pour vous de construire sur:
(suite)..rends compte que ce n'est pas le but idée de l'accès, mais pour ce que j'ai à faire, ça fonctionne). alors que je cherchais une boucle qui permettrait d'incrémenter le numéro de la zone de texte nom, en vue d'effectuer les bassic calc pour chacun d'eux, à condition qu'ils contiennent une valeur dans la première place.
Je ne comprends toujours pas assez sur le contexte, mais vous n'avez pas nécessairement besoin de code VBA pour traiter zéro. Peut-être une fonction VBA dans une zone de texte de la source de contrôle de l'expression: IIf(quelque chose = 0, de "traiter de zéro", "non-zéro")
Malgré ma confusion, ne le TextBoxNames procédure vous donner au moins un morceau de ce que vous vouliez?
Je m'en excuse. Je pense que cela peut se résument à mon manque de comprendre comment l'expliquer. Et oui, le premier exemple que vous avez donné m'a énormément aidé. J'ai donc commencé juste en pensant qu'il doit y avoir une boucle pour parcourir toutes les cases de texte qui sont applicables à l'équation, donc que je n'ai pas de type de l'équation pour chaque ensemble de relative des zones de texte. je suppose que l'idée était de boucler à travers le "numérique" valeur de la zone de texte. si la boucle se faire d'abord ceci: txt_001_result = txt_001_value / txt_001_calc si tous les deux ne sont pas null/vide, un
OriginalL'auteur HansUp
Je préfère utiliser un POUR CHAQUE itération à travers la collection de contrôles de ce que les zones de texte sont (que ce soit le formulaire lui-même ou un panneau de contrôle)
Signifie également que vous pouvez faire des groupes personnalisés (en les mettant tous sur le même conteneur).
Notez que si vous avez autres contrôles, vous pourriez avoir besoin d'un typecheck (
IF TYPEOF(myBox) = "TextBox" THEN ...
)Vous pouvez aussi faire il aime:
Je préfère largement le Pour Chacun d'eux, si.
Albert est correct, vous pouvez utiliser .texte, vous devez définir le focus à chaque fois, donc peut aussi bien utiliser de la valeur! Mais BradC réponse qui fonctionne à merveille!
OriginalL'auteur BradC