2016-09-09 2 views
0

Je dois ajouter une liste déroulante (contrôle ActiveX) ou une validation des données dans la liste déroulante. J'ai une gamme de 15 valeurs comme, haute, basse, moyenne, etc ... Ont créé une plage nommée appelée "priorityvalue".Ajout d'une zone de liste déroulante sur plusieurs cellules

Je peux créer une liste déroulante en utilisant la zone de liste déroulante en ajoutant la plage nommée sous ListFillRange dans la liste des propriétés ou la validation des données en donnant une plage nommée.

Mais mon souci, j'ai besoin de liste déroulante pour 58 cellules avec les mêmes valeurs mentionnées ci-dessus. Son travail fastidieux pour créer une boîte combo pour toutes les cellules. S'il vous plaît me suggérer une meilleure option ici.

La liste de validation des données est utile. Cependant, il est utilisateur de faire défiler la liste déroulante sur chaque cellule contrairement zone de liste déroulante, il n'a pas de boîte d'entrée ..

S'il vous plaît suggèrent

+0

penser que cela peut avoir déjà été répondu précédemment [suivez ce lien] (http://stackoverflow.com/questions/17675761/programatically-add-combobox-in-vba-excel) – DaveMac

+0

@DaveMac Comment puis-je modifier le code donné dans le lien que vous avez suggéré, donc cette même zone de liste déroulante est ajoutée à toutes les 58 cellules disponibles dans une colonne? Je suis confus. S'il vous plaît aider !! – sady

+0

Les cellules sont-elles dans une colonne ou sont-elles dans plusieurs colonnes? c'est-à-dire qu'ils descendent dans la même colonne ou traversent-ils plusieurs colonnes mais la même rangée? – Zac

Répondre

0

Collez le code ci-dessous dans « ThisWokbook »

Private Sub Workbook_Open() 

    Dim oItem As Object 

    For Each oItem In Worksheets(1).OLEObjects 

     If TypeName(oItem.Object) = "ComboBox" Then 

      If Len(oItem.Object.Value) > 0 Then 
       oItem.Object.Value = "" 
      End If 

     End If 

    Next 

    Set oItem = Nothing 

End Sub 

NOTE: Il y a des mises en garde à cela. Au-dessus du code réinitialisera toutes les zones de liste modifiable dans votre feuille de calcul (également, j'ai défini la feuille de calcul à la première feuille de calcul dans le classeur, vous souhaiterez peut-être rendre cela dynamique). Si vous ne voulez pas à réinitialiser tous les comboboxes et seulement faire ceux ajoutés via la fonction, vous pouvez utiliser le format de nom pour filtrer ceux que vous souhaitez effacer

Hope this helps

+0

Merci beaucoup qui a beaucoup aidé !! – sady

+0

Pas de soucis, heureux d'aider – Zac

0

Essayez ceci:

Sub AddComboBoxToColumns(ByVal oRange As Excel.Range) 

    Dim oOLE As OLEObject 
    Dim oCell As Object 

    ' Loop through all the cells in the range 
    For Each oCell In oRange.Cells 

     ' Add ComboBox in each cell 
     With oCell 

      Set oOLE = .Parent.OLEObjects.Add("Forms.combobox.1") 
      oOLE.Top = .Top 
      oOLE.Left = .Left 
      oOLE.Width = .Width 
      oOLE.Height = .Height 
      oOLE.Name = "ComboBox" & .Address(False, False) 
      oOLE.Object.List = Array("Test1", "Test2") 

     End With 

    Next 

    Set oOLE = Nothing 

End Sub 

NOTE: Appelez le ci-dessus fonction avec la plage de cellules que vous souhaitez ajouter ComboBox. Vous devrez changer le tableau pour utiliser les valeurs que vous souhaitez (vous pouvez les taper là ou donner la plage où vos valeurs existantes sont)

+0

désolé pour le retard dans la réponse. J'ai des inquiétudes. Vous m'avez demandé d'appeler la fonction ci-dessus de la cellule. J'ai créé un module en modifiant le code ci-dessus en tant que fonction publique et j'essaye d'appeler depuis la cellule en utilisant formula = cell = AddComboBoxToColumns (E1, E57). Mais je sais que je fais quelque chose de mal ici comme son fonctionnement. – sady

+0

S'il vous plaît aidez-moi si la procédure que j'ai suivie n'est pas ce que vous attendiez. Comment appeler avec la plage de cellules que je veux ajouter la zone de liste déroulante – sady

+0

@sady, Si vous voulez l'appeler à partir de votre feuille de calcul, vous pouvez toujours ajouter un bouton à votre feuille de calcul et l'appeler ainsi. Sinon, comme vous l'avez fait, ajoutez-le à un module et appelez-le à partir d'une autre fonction/sous. Faites-moi savoir si cela fonctionne – Zac