Affecter une list combinée à une list nommée dans vba

J'essaie d'atsortingbuer dynamicment une list à chaque zone de list déroulante en fonction des valeurs d'une zone de list déroulante spécifique. L'idée est que l'user choisit une catégorie dans la combobox spécifique et toutes les autres boîtes combinées saisissent les éléments de cette catégorie sous la forme d'une list nommée.

Donc, la structure est comme

Catégories

Catégorie 1

catégorie 2

Catégorie 1

Point 1, point 2

Etc. J'ai travaillé sur un faux set de noms, mais maintenant que j'utilise de véritables gammes nommées, le code se casse. Il brise "For Each rng In ws.Range (str)" et indique que la "méthode" de la plage 'of object' _worksheet 'a échoué.

Ce code fonctionne. Ou travaillé. Ensuite, j'ai changé ws pour pointer vers une feuille différente de gammes nommées et maintenant rien ne fonctionne.

La valeur de CBOCategory est une valeur d'une list de toutes les gammes nommées, mais il semble que Excel ne voie aucune d'entre elles. J'ai essayé de triggersr même une tâche de consignation au lieu d'append chaque élément et j'ai eu une erreur similaire

Private Sub CBOCategory_Change() 'Populate dependent combo box with appropriate list items 'according to selection in cboCategoryList. Dim rng As Range Dim ws As Worksheet Dim str, temp, cbName As Ssortingng Dim counter As Integer Set ws = Worksheets("Item Master") Dim obj As OLEObject str = CBOCategory.Value For Each obj In ActiveSheet.OLEObjects If obj.Name = "CBOCategory" Then ' nothing Else temp = obj.Object.Value obj.Object.Value = "" For Each rng In ws.Range(str) obj.Object.AddItem rng.Value Next rng obj.Object.Value = temp End If 'MsgBox ("updated!") Next obj End Sub 

Le code fonctionne bien. La cause principale du problème est que les plages nommées étaient définies dynamicment par une formule. Les formules ne calculent pas correctement lorsque le code a été exécuté, donc vba n'a pas pu utiliser une gamme nommée dynamicment pour find une autre, ainsi que la gamme nommée dynamic.

La solution consiste à définir explicitement les plages nommées. Ensuite, le code fonctionne bien.