2013-04-15 4 views
1

je le code VBA suivant:liste déroulante Maximum/longueur de formule dans Excel

myList = "test" 

Range("A1:Z1").Validation.Delete 
Range("A1:Z1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=myList 

Si ma liste dépasse 256 caractères, il est tronqué. Si elle dépasse 1024, j'obtiens une erreur d'exécution (je pense que c'est la longueur maximale pour une formule).

Comment puis-je dépasser ces limites? J'utilise Excel 2003.

+0

Vous pouvez utiliser l'approche de la plage nommée li nk http://www.contextures.com/xlDataVal11.html Ce que vous pouvez faire (et je fais cela) est de créer une feuille cachée et dans cette feuille je peuplerai le Col A avec ma liste et lui donner un nom puis utiliser cette plage nommée dans la liste de datavalidation. Essayez-le et si vous êtes coincé, il vous suffira de poster le code que vous avez essayé de poster, et je pourrais vous montrer un exemple de code pour y parvenir. :) –

+0

Comme je l'ai déjà dit plus bas, le projet VBA sert de référence et est utilisé ainsi que de nombreux documents Excel. J'ai regardé cette approche mais je devrais créer dynamiquement les noms et ensuite les contrôles. Cela ressemble à un peu plus complexe. – dnLL

+0

Non, vous n'avez pas besoin de créer les contrôles;) Juste la plage nommée dans la feuille cachée –

Répondre

1

En utilisant le lien posté dans les commentaires ci-dessus, j'ai été en mesure de créer une liste déroulante avec plus de 256/1024 caractères. Voici ce que j'ai réussi à obtenir après plus de recherches et d'essais:

ActiveWorkbook.Names.Add Name:="List", RefersTo:="=ValidationList!$A$1:$A$" & i 
Range("A1:AZ1").Validation.Delete 
Range("A1:AZ1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=List" 

Rien de plus. i est le nombre de lignes de ValidationList feuille. Je crée cette feuille dynamiquement et remplit la première colonne A avec ce que je veux afficher dans la liste déroulante.

références utiles: