J'ai ajouté des contrôles de formulaire à une collection et je peux récupérer leurs propriétés lorsque je me réfère aux membres par index.Pourquoi ne puis-je pas obtenir les propriétés des membres de cette collection?
Cependant, lorsque j'essaie d'utiliser des propriétés en référençant des membres de la collection, je vois un 'Impossible de définir la propriété ControlSource. Membre introuvable. 'erreur dans la fenêtre Locals.
Voici une version simplifiée du code:
'Add controls to collection'
For x = 0 To UBound(tabs)
activeTabs.Add Item:=Form.MultiPage.Pages(Val(tabs(x, 1))), _
key:=Form.MultiPage.Pages(Val(tabs(x, 1))).Caption
Next x
'Check name using collection index'
For x = 0 To UBound(tabs)
Debug.Print "Tab name from index: " & activeTabs(x + 1).Caption
Next x
'Check name using collection members'
For Each formTab In activeTabs
Debug.Print "Tab name from collection: " & formTab.Caption
Next formTab
Les résultats dans la fenêtre immédiate sont:
Tab name from index: Caption1
Tab name from index: Caption2
Tab name from collection:
Tab name from collection:
Pourquoi une méthode de travail et l'autre échec?
Ceci est dans un module de code standard, mais j'ai un code similaire qui fonctionne très bien à l'intérieur des modules de formulaire. Cela aurait-il quelque chose à voir avec cela?
Edité pour ajouter
formTab a été déclarée comme témoin, mais je trouve que si elle est déclarée comme un objet puis le code fonctionne. Cela résoudra probablement mon problème, mais dans le but d'améliorer mes connaissances, je serais reconnaissant pour toute explication de ce comportement, en particulier en ce qui concerne la différence dans l'exécution du code dans les différents types de module.
Merci, cela a beaucoup de sens. J'ai déclaré formTab comme page (le nom correct pour le contrôle, je préfère simplement les appeler des onglets) et comme vous le prédisez, cela fonctionne très bien. J'ai également copié le code dans un module de formulaire et là il fonctionne indépendamment du fait que formTab soit déclaré comme un contrôle, une page ou un objet. Bizarre. – Lunatik
@Lunatik VB va parfois sauter à travers beaucoup de cerceaux pour essayer de comprendre ce que vous essayez de faire. Malheureusement, cela ne conduit pas toujours à un bon code et vous permettra de ne pas savoir vraiment ce que fait votre code. J'ai écrit une tonne de code où je ne savais pas ce qu'il faisait mais VBA a permis que ça marche :-). –