2009-04-27 5 views
0

Il s'agit d'une question vba. J'ai trouvé la question: "Ajout de contrôles à un cadre dans un formulaire utilisateur Excel avec VBA" et utilisé sa méthode pour ajouter des boutons de commande à mon cadre dans mon formulaire utilisateur. Depuis que j'ajouté quatre boutons de commande, j'ai couru le code dans une boucle, et a utilisé leAjout de code à un bouton de commande ajouté dynamiquement à une image dans un code utilisateur

With ... 
     .Name = "commandbutton" & x 

pour donner à chaque bouton de commande son propre nom. J'ai inclus dans mes macros de code pour chaque bouton de commande (depuis que je les ai renommés je sais quel est le nom de chaque cb) mais quand je clique sur le bouton, rien ne se passe. Sinon, si quelqu'un pouvait m'expliquer comment utiliser le code pour placer des contrôles sur un formulaire dans un cadre, je pourrais résoudre mon problème d'une manière différente.

Merci,

Michael

Répondre

0

Il semble que les événements ne sont traités pour les variables d'objets qui ont été déclarés lorsque le programme VBA est compilé (par exemple au moment de la conception.) Si vous créez dynamiquement des objets dans le programme (c'est-à-dire au moment de l'exécution), vous devez affecter des références à ces objets aux variables d'objet appropriées qui ont déjà été déclarées.

Comme par votre exemple, dans le module qui se rapporte à votre UserForm, vous devez avoir:

Public WithEvents btn1 As MSForms.CommandButton 
Public WithEvents btn2 As MSForms.CommandButton 
Public WithEvents btn3 As MSForms.CommandButton 
Public WithEvents btn4 As MSForms.CommandButton 

(Le préfixe MSForms au type de variable pourrait ne pas être strictement nécessaire)

puis dans votre instruction With pour créer les contrôles, vous devez affecter chaque contrôle à l'une des variables qui finit par être assez malpropre.

meilleures solutions:

  • créer le nombre maximum de boutons possibles au moment de la conception et juste basculer la propriété Visible pour montrer les bonnes
  • si la fonction de chaque bouton serait déterminé lors de l'exécution puis utilisez une propriété de l'objet CommandButton pour le déterminer (par exemple, la propriété Caption, la propriété Tag), puis demandez au gestionnaire d'événements de ce bouton d'appeler la fonction appropriée en fonction de cette propriété.
  • Modifiez l'interface utilisateur et utilisez un ListBox ou ComboBox au lieu des boutons
Questions connexes