web-dev-qa-db-fra.com

Vue d'ensemble des différences entre les contrôles de formulaire et les contrôles ActiveX dans Excel

Pourquoi y a-t-il 2 types de contrôles disponibles dans Excel? (2 boutons, 2 combos, 2 cases à cocher, etc ...)

Quelle est la différence entre Contrôles de formulaires et Contrôles ActiveX? Lequel devrais-je utiliser?

Certains exemples de code que je trouve fonctionnent en ligne avec mes commandes, mais d'autres non. Comment venir?

Comment puis-je travailler avec chaque type et comment puis-je faire la différence?

12
ashleedawg

Il y a une confusion [éternelle] autour des deux types de contrôles disponibles pour Excel - exacerbés par le contraste - terminologie utilisé par différentes sources en ligne.

Ce n'est qu'un aperçu général des différences entre Contrôles de formulaire et Contrôles ActiveX (basé sur mes anciennes notes qui m'ont finalement aidé à comprendre les différences!) Visitez les liens inclus pour des informations plus détaillées sur chaque contrôle, y compris le code et les exemples de projets. ☺

(Adapté de mon message d'origine ici - maintenant fermé)


Présentation:

  • Il existe deux types de contrôles: Contrôles de formulaire et Contrôles ActiveX :

    • Les deux types de contrôles peuvent être utilisés sur des feuilles de calcul mais seuls les contrôles ActiveX peuvent être utilisé sur les formulaires utilisateur .

    • Les contrôles de formulaire font partie de la collection Formes (tout comme les objets de dessin), et sont donc appelés comme: *<code>worksheet</code>* **<code>.</code> <code>Shapes("</code>** *<code>controlname</code>* **<code>")</code>**

    • Les contrôles ActiveX font fondamentalement partie de la feuille de calcul et sont donc appelés comme:
      *<code>worksheet</code>* **<code>.</code>** *<code>controlname</code>*

    • Les deux types de contrôles peuvent être créés, modifiés et supprimés de la feuille de calcul ou par programme avec VBA, cependant, les 2 types de contrôles ont une syntaxe légèrement différente lorsque vous utilisez VBA pour vous y référer.

  • Certains sites discutent également d'une forme de données . Ce n'est rien de plus qu'un formulaire utilisateur spécialement conçu pour la saisie/manipulation de données, il aurait donc été plus logique de les appeler (le plus familier "Formulaire de saisie de données".

  • La documentation Office fait parfois référence à une feuille de calcul sous forme de formulaire. Bien que ce soit techniquement correct, ne laissez pas cela vous dérouter. Considérez le mot "forme" comme étant utilisé dans un sens général:

    dictionary image: form


Deux types de commandes

  1. Contrôles de formulaire

  2. Contrôles ActiveX

Les deux se regardent, se comportent et sont contrôlés de manière similaire, mais pas identique. (Liste ici .)

Par exemple, comparons les deux types de zones de liste déroulante . Dans certains langages de programmation, des contrôles comparables sont appelés "menu déroulant" ou "liste déroulante". Dans Excel, nous avons un " combo de contrôle de formulaire ", et un " Zone de liste déroulante de contrôle ActiveX ":

compare control types (Cliquez sur l'image pour agrandir.)

☆ "Nom par défaut" s'applique aux contrôles créés manuellement. Les contrôles créés par programmation n'ont pas (ou ne nécessitent pas) de nom par défaut et doivent donc en avoir un attribué immédiatement lors de la création.


differences between controls

(Source: ma réponse )


Contrôler la disponibilité

Cette image ci-dessous montre quels contrôles communs sont généralement disponibles pour une utilisation dans les feuilles de calcul et les formulaires utilisateur.

chart of controls

D'autres facteurs peuvent affecter la disponibilité du contrôle.


À propos des contrôles ActiveX et des problèmes de sécurité associés

Un contrôle ActiveX est un extension à la boîte à outils VBA. Vous utilisez les contrôles ActiveX comme vous le feriez avec n'importe quel contrôle intégré standard, tel que le contrôle CheckBox. Lorsque vous ajoutez un contrôle ActiveX à une application, il devient partie intégrante de l'environnement de développement et d'exécution et fournit de nouvelles fonctionnalités pour votre application.

  • Un contrôle ActiveX est implémenté en tant que serveur en cours de traitement (généralement un petit objet) qui peut être utilisé dans n'importe quel conteneur OLE. Notez que la fonctionnalité complète d'un contrôle ActiveX n'est disponible que lorsqu'il est utilisé dans un conteneur OLE conçu pour être au courant des contrôles ActiveX.

  • Ce type de conteneur, appelé conteneur de contrôle ou objet de contrôle, peut fonctionner un contrôle ActiveX en utilisant les propriétés et méthodes du contrôle, et reçoit des notifications du contrôle ActiveX sous forme d'événements. La figure suivante illustre cette interaction:

    example
    ( Source : this et this )

Voir aussi:


Boutons d'option (boutons radio)

Dans Excel, les deux types de boutons radio sont en fait appelés Boutons d'options . Pour confondre davantage les choses:

  • le nom par défaut du contrôle de formulaire est OptionButton1.

  • le nom par défaut du contrôle ActiveX est Option Button 1.

Une bonne façon de les distinguer est d'ouvrir la liste des propriétés du contrôle (sur le ruban sous l'onglet Développement, ou en cliquant avec le bouton droit sur le contrôle et en choisissant Properties, ou en appuyant sur F4), car le contrôle ActiveX a beaucoup plus d'options que le contrôle de formulaire plus simple.

Les boutons d'option et les cases à cocher peuvent être liés ensemble (donc une seule option à la fois peut être sélectionnée dans le groupe) en les plaçant dans un partage Zone de groupe .

Sélectionnez le contrôle de zone de groupe, puis maintenez Ctrl tout en sélectionnant chacun des autres contrôles que vous souhaitez regrouper. Cliquez avec le bouton droit sur le contrôle de zone de groupe et choisissez GroupingGroup.

Les deux premiers liens ci-dessous sont des ensembles d'instructions distincts pour gérer chaque type de bouton d'option.


ÉVÉNEMENTS DE CONTRÔLE DE MANIPULATION:

Événements de contrôle de formulaire (événement Click uniquement)

Les événements de contrôle de formulaire ne peuvent répondre qu'à un seul événement: l'événement Click. (Plus d'informations ici .) Notez que cette section ne s'applique pas aux formulaires utilisateur car ils utilisent uniquement des contrôles ActiveX.

Pour ajouter une procédure pour l'événement Click:

  • Cliquez avec le bouton droit sur le contrôle et choisissez Assign Macro...

  • Dans la boîte de dialogue "Attribuer une macro":

    • Sélectionnez une procédure existante et cliquez sur OK, ou,

    • Créez une nouvelle procédure dans le VBE en cliquant sur New..., ou,

    • Enregistrez une nouvelle macro en cliquant sur Record..., ou,

    • pour supprimer l'événement attribué, supprimez son nom de Macro Name champ et cliquez OK.

    assign events (Cliquez sur l'image pour agrandir.)

Pour renommer, modifier ou supprimer des macros existantes, appuyez sur Alt+F8 pour ouvrir l'interface Macro:

Macros dialog


Événements de contrôle ActiveX

Les contrôles ActiveX ont une liste plus complète des événements auxquels ils peuvent être configurés pour répondre.

Pour affecter des événements aux contrôles ActiveX, cliquez avec le bouton droit sur le contrôle et choisissez View Code. Dans le VBE, vous pouvez coller du code ou choisir des événements spécifiques dans la liste déroulante en haut à droite de la fenêtre VBE.

activeX events (Cliquez sur l'image pour agrandir.)

Contrôlez la gestion des événements sur un formulaire utilisateur:

Les événements peuvent également être utilisés dans les contrôles des formulaires utilisateur. Étant donné que seuls les contrôles ActiveX peuvent être placés dans un formulaire utilisateur, vous aurez le compromis "plus de codage + plus de fonctionnalités".

Les contrôles ActiveX sont ajoutés aux formulaires utilisateur de la même manière qu'ils sont ajoutés à une feuille de calcul. Gardez à l'esprit que tous les événements affectés à la forme utilisateur lui-même (c'est-à-dire, en arrière-plan) seront "bloqués" dans toutes les zones couvertes par un contrôle, vous devrez donc peut-être affecter les mêmes événements à les contrôles ainsi que le formulaire utilisateur.

Par exemple , afin que cette forme d'utilisateur réponde à MouseMove n'importe où sur le formulaire, le même code d'événement a été appliqué à le formulaire utilisateur, les zones de texte, les boutons d'option et le cadre:

A userform with controls responding to events


EXEMPLES VBA

Ajouter/modifier/supprimer un bouton d'option de contrôle de formulaire à l'aide de VBA:

Sub formControl_add()
    'create form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100)
        .Name = "cOptionButton1"  'name control immediately (so we can find it later)
    End With
End Sub

Sub formControl_modify()
    'modify form control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Select
    With Selection 'shapes must be Selected before changing
        .Characters.Text = "wxyzabcd"
   End With
End Sub

Sub formControl_delete()
    'delete form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Delete
End Sub

Ajouter/modifier/supprimer un bouton de commande ActiveX à l'aide de VBA:

Sub activexControl_add()
    'create ActiveX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects.Add("Forms.CommandButton.1")
        .Left = 25
        .Top = 25
        .Width = 75
        .Height = 75
        .Name = "xCommandButton1" 'name control immediately (so we can find it later)
    End With
End Sub

Sub activexControl_modify()
    ' modify activeX control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects("xCommandButton1").Object
        .Caption = "abcxyz"
        .BackColor = vbGreen
    End With
End Sub

Sub activexControl_delete()
    ' delete activeX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.OLEObjects("xCommandButton1").Delete
End Sub

Ajouter/supprimer des éléments d'une zone de liste déroulante de contrôle de formulaire:

Sub ComboBox_addRemoveItems_FormControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add item to form control combo box
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd"

    'remove all items from from form control combo bo
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems

End Sub  

Ajouter/supprimer des éléments d'une zone de liste déroulante ActiveX:

Sub ComboBox_addRemoveItems_ActiveXControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add items to ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd"

    'remove all items from ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear

End Sub  

Plus d'information:

19
ashleedawg