Comment faire pour Remplir une zone de liste déroulante
Je suis assez nouveau dans VBA et j'ai eu du mal avec le remplissage d'une zone de liste déroulante.
Je suis en train de remplir un combobox avec le contenu de la première colonne dans une feuille de calcul afin que je puisse supprimer la ligne correspondante de données basé sur la zone de liste déroulante de sélection.
J'ai regardé à travers plusieurs questions à la fois d'ici et d'ailleurs lors de la prise de cette question, mais je n'ai rien trouvé qui fonctionne.
- remplir combobox en VBA avec les éléments du tableau
- Comment dois-je remplir une zone de liste déroulante à partir d'une colonne dans ma feuille excel réparti?
- http://www.techrepublic.com/blog/microsoft-office/populate-a-userform-combo-box-in-excel-with-a-dynamic-list/
Ci-dessous le code que j'ai essayé. Je suis un peu perdu, car j'ai été en train de bricoler des réponses différentes à partir d'autres questions afin d'obtenir que cela fonctionne, mais en vain. J'attends de la zone de liste déroulante à remplir avec les valeurs de la colonne 1, mais il reste vide.
Tentative #1 Ceci a impliqué la création d'une gamme dynamique:
=OFFSET(PC_DataSheet!$A$2,0,0, COUNTA(PC_DataSheet!$A$1:$A$65536)-1,1)
Private Sub UserForm1_Initialize()
Dim rngPCNumber As Range
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
For Each rngPCNumber In ws.Range("PCNumber")
Me.PC_ListComboBox.AddItem rngPCNumber.Value
Next rngPCNumber
End Sub
Tentative #2
Private Sub UserForm1_Initialize()
Dim arr() As Variant
arr = Worksheets("Sheet1").Range("C2:" & lrow).Value
PC_ListComboBox.List = arr
End Sub
Tentative #3
Private Sub UserForm1_Initialize()
Dim vArr As Variant
Dim i As Integer
vArr = Sheet1.Range("A:1").Value
With PC_ListComboBox.Clear
For i = LBound(vArr) To UBound(vArr)
.AddItem vArr(i)
Next i
End With
End Sub
Toute aide sur ce serait vraiment apprécié!
EDIT: j'ai essayé d'insérer le code suggéré par de Gary Étudiant dans mon UserForm_Initialize() Sub, mais quand j'essaie d'ouvrir un userform j'obtiens le message d'erreur suivant:
Erreur d'exécution '9': Indice en dehors de la plage de
Lorsque je clique sur le débogage, il met en évidence ce code:
'Opens PC UserForm when pressed.
Private Sub AddPCButton_Click()
UserForm.Show 'This line is the line highlighted by the debugger.
End Sub
Je n'ai aucune idée de ce qui est à l'origine de ce...lorsque j'utilise la suggestion de code, j'obtiens un message d'erreur, mais quand j'enlève le code de l'userform fonctionne parfaitement.
Voici Private Sub UserForm_Initialize() avec et sans la suggestion de code.
'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()
'Empties combo boxes.
PC_OSTypeComboBox = ""
PC_HDTypeComboBox = ""
'Populates combo boxes.
With PC_OSTypeComboBox
.Clear
.AddItem "Windows 8"
.AddItem "Windows 7"
.AddItem "Windows Vista"
.AddItem "Windows XP"
.AddItem "Windows 2000"
.AddItem "Windows 98"
.AddItem "Windows NT"
.AddItem "Windows 95"
End With
With PC_HDTypeComboBox
.Clear
.AddItem "SATA"
.AddItem "IDE"
.AddItem "SCSI"
End With
End Sub
C'est notamment suggéré de code:
'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()
Dim N As Long, i As Long
With Sheets("Sheet1")
N = .Cells(Rows.Count, 1).End(xlUp).Row
End With
With PC_NumberComboBox
.Clear
For i = 1 To N
.AddItem Sheets("Sheet1").Cells(i, 1).Value
Next i
End With
'Empties combo boxes.
PC_OSTypeComboBox = ""
PC_HDTypeComboBox = ""
'Populates combo boxes.
With PC_OSTypeComboBox
.Clear
.AddItem "Windows 8"
.AddItem "Windows 7"
.AddItem "Windows Vista"
.AddItem "Windows XP"
.AddItem "Windows 2000"
.AddItem "Windows 98"
.AddItem "Windows NT"
.AddItem "Windows 95"
End With
With PC_HDTypeComboBox
.Clear
.AddItem "SATA"
.AddItem "IDE"
.AddItem "SCSI"
End With
End Sub
Vous ne devriez pas écrire les balises dans les titres, puisque les questions sont déjà triés et classés par tags. Aussi, des choses comme "merci" ou "j'ai eu cette erreur trop" ne sont pas vraiment nécessaires. Ce sont des règles simples qui vous aider à rester StackOverflow organisé 🙂
Ah ok, merci!!!! <--- de ne pas être réellement facétieux ici 😉
Dans votre mise à jour, on dirait que vous pourriez être le référencement d'un inexistante Feuille de travail - vous avez oublié de mettre à jour "Sheet1" de ce que @Gary Étudiants posté?
L'erreur est "subscript out of range" si cela fait une différence. J'ai double-triple-vérifié pour nommer les problèmes et n'en trouva aucun. Comment puis-je vérifier que le nom de la feuille est inclus dans la liste des feuilles de calcul?
OriginalL'auteur ckemmann | 2015-04-10
Vous devez vous connecter pour publier un commentaire.
Ici est un super exemple simple de créer et de remplir un Formes style de zone de liste déroulante:
Par exemple:
EDIT#1
J'ai créé un UserForm appelé Démo contenant une zone de liste déroulante appelée MyBox
Dans un Module Standard j'ai mis:
et dans le UserForm zone de code:
De course DisplayIt() produit:
Ceci est basé sur ce tutoriel
Voir mon EDIT#1
Veuillez voir ma réponse edit'. J'ai essayé de mise en œuvre de votre code et c'est ce qui provoque une erreur lorsque j'essaie d'ouvrir l'objet userform.
Laren, Gary Étudiant...soit vous avez une idée, je suis totalement perplexe ici.
OriginalL'auteur Gary's Student
J'ai donc essayé la solution de Gary Étudiant suggéré, qui a travaillé quand j'ai créé un nouveau classeur avec le code qu'il a fournis, mais pour une raison quelconque, le 'indice en dehors de la gamme' erreur a cessé de venir quand j'ai mis en place dans mon projet, peu importe ce que j'ai fait pour renommer mes feuilles de calcul dans le classeur, y compris l'établissement d'une sous-liste de toutes les feuilles de calcul et d'appeler la feuille à partir de là.
J'ai plutôt opté pour l'utilisation d'un inputbox au lieu d'une zone de liste déroulante, qui a fini par être un peu plus simple à coder. Ci-dessous est le code pour quiconque est curieux.
End Sub
OriginalL'auteur ckemmann
Le code ci-dessus se trouve dans mon UserForm Code (Clic-Droit sur l'objet UserForm, puis cliquez sur 'voir le code')
J'ai créé une Feuille de calcul LISTES d'appels. Chaque colonne de la feuille pour une autre zone de liste déroulante. Une fois que j'ai rempli et j'ai obtenu le code de travail, je me suis caché dans les LISTES de la feuille de calcul.
Chaque ComboBox j'ai nommé CB_XX afin de noter les noms dans le code
Je commence le code en définissant la longueur de la liste (note d'échec si vous ne disposez que d'un seul élément dans la liste, mais si vous avez seulement un élément à ne pas utiliser une zone de liste modifiable)
Une fois que je reçois les longueurs j'ai ajouter les colonnes appropriées pour corriger les zones de liste modifiables. Remarque le +1 de chaque pour le/la boucle suivante. C'est pour ajouter un blanc à la fin de chaque liste pour permettre à l'utilisateur de vider la sélection. Enlever le +1 si vous ne voulez pas que le vide. Je commence à i = 2 pour ne pas montrer de la ligne d'en-tête sur mes LISTES feuille.
OriginalL'auteur Kevin