Comment puis-je me réfère à un objet de contrôles, sur une feuille de calcul, à l'aide d'un nom de variable?
J'ai ajouté un contrôle ListBox à une FEUILLE (et non à un "UserForm")
Je l'ai fait à l'aide de la souris.
J'ai cliqué sur le petit Marteau et l'icône de la Clé.
Cette ListBox semble être facilement référencé à l'aide de code comme ceci:
ListBox1.Clear
ou
ListBox1.AddItem("An option")
Cependant, j'ai trois de ces zones de liste (nom, idéalement, ListBox1, ListBox2 et ListBox3) et je veux écrire une fonction pour les remplir avec des données du tableau, comme ceci:
Call populate_listbox(ListBox2, designAreaArray)
Où le premier argument est la zone de liste nom, le 2ème est les données.
Mais je ne sais pas comment envoyer "ListBox2" correctement, ou reportez-vous correctement à l'intérieur de la fonction.
Par exemple:
Dim controlName as string
controlName = "ListBox1"
ne fonctionne pas, même si je définis la fonction comme suit:
Sub populate_listbox(LB As ListBox, dataArray As Variant)
Dim i As Integer: i = 0
For i = LBound(dataArray, 2) + 1 To UBound(dataArray, 2) ' Skip header row
LB.AddItem (dataArray(index, i))
Next i
End Sub
Clairement il en résulte un mal appariés erreur type de données. J'ai essayé de définir la "nomchamp" comme une zone de liste, mais cela ne fonctionne pas non plus...
Bien que peut-être c'est ma référence à la zone de liste qui est incorrect. J'ai vu TELLEMENT de façons de se référer à un objet de contrôle...
MSForms.ListBox.
ME.ListBox
Forms.Controls.
Worksheet.Shapes.
La liste va sur une, et rien n'a fonctionné pour moi.
OriginalL'auteur Supermitch | 2012-01-19
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Vous pouvez également remplir une listbox sans avoir à parcourir le tableau, essayez ceci:
Pas de prob, content que cela a fonctionné pour vous.
OriginalL'auteur Reafidy
Les sous signature pour correspondre à ceci:
Sub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)
Maintenant, vous pouvez le passer comme vous essayiez à l'origine.
NOTE: Cela ne fonctionne que si vous avez utilisé le "ActiveX" version de la listbox. Je suis en supposant que vous êtes parce que vous êtes en mesure d'appeler ListBox1 directement à partir d'un module.
PS: Les contrôles ActiveX sont les membres de la société mère fiche de l'objet. Donc, si vous avez la listbox1 sur la feuille "sheet1", vous pouvez aussi l'appeler comme
Sheet1.ListBox1
de sorte que vous ne vous trompez pas si vous vous retrouvez avec plusieurs feuilles avec de multiples zones de liste. Aussi, vous pouvez modifier le nom juste pour le rendre plus facile sur vous-même.OriginalL'auteur Justin Self
OriginalL'auteur Zuffa