2010-05-31 3 views
1

J'ai fait une interface utilisateur dans VBA avec beaucoup de zone de texte. J'ai lu une feuille Excel et j'ai mis toute la valeur de celle-ci dans toute la zone de texte de mon interface utilisateur. L'utilisateur peut donc modifier les valeurs et les enregistrer dans la feuille Excel. Parce que nous ne pouvons pas nommer la zone de texte comme array (textBox (1), textbox (2) ....) il est difficile de remplir la zone de texte en utilisant une fonction de boucle.Comment remplir beaucoup texbox en utilisant la fonction de boucle dans VBA

J'ai essayé d'utiliser la propriété tag ou tabindex mais je ne trouve pas la bonne façon de procéder .... Est-ce que quelqu'un sait un moyen facile de résoudre ce problème !!!

Remerciements

Répondre

0

itérez la collection de contrôle du formulaire.

Un exemple, que votre formulaire utilisateur est appelé myForm, puis

myForm.Controls(i) 

vous obtient une poignée pour un contrôle en myForm. Vous pouvez maintenant utiliser les propriétés de contrôle pour identifier celle que vous recherchez (étiquette, zone de texte, bouton, etc.). Je vous suggère d'utiliser un Tag comme, hmmmm .... "TEXTBOX", pour faciliter le processus d'identification.

if myForm.Controls(i).Tag="TEXTBOX" then 'it's my textbox ! hurraay!!! 
+0

Merci, j'utilise myForm.Controls (i) .Text et cela fonctionne bien. Merci pour l'indice !!! – user90714

+0

Mise en garde, VB résout les propriétés des objets lors de l'exécution, et Text est un nom de propriété qui n'existe pas, par exemple, pour les labels (et autres contrôles) ... Donc, vous devrez vérifier votre err.number après un On Erreur GoTo Suivant, ou évitez-le complètement en vérifiant les propriétés qui existent pour tous les contrôles (balise, nom, etc). Content de pouvoir aider. – jpinto3912

1

Oui, vous pouvez.

Le nom de votre textboxes Textbox1, TextBox2 etc, les accès puis avec

Form.Controls("Textbox" & ID) 
1

vous pouvez utiliser ce code pour remplir plusieurs textboxs

Dim rs As Object 
    Dim i As Integer 
    Dim ctlr As Control 
    Set rs = Me.Recordset.Clone 
    For Each ctlr In Me.Controls 
    If TypeOf ctlr Is TextBox Then 
     For i = 0 To ctlr.Controls.Count 
     On Error Resume Next 
     ctlr.Value = rs!SomeField 
     rs.MoveNext 
     Next i 
    End If 

Next