12
votes

Excel-VBA: Obtenir les valeurs des contrôles de formulaire

Embedded dans la feuille de calcul Stade1 J'ai une liste déroulante de contrôle de formulaire nommée ComboBox_Test et il a sélectionné la valeur x

en plus de Cela, j'ai aussi encaissé un bouton que lorsque j'appuie dessus, je veux qu'il prenne la valeur de Combobox_test et placez-le dans quelque chose.aux (y) . Mais je ne peux pas le faire travailler et je suis un peu frustré. Peut-être que vous pouvez me signaler dans la bonne direction xxx

n'importe quel avis? Suis un débutant absolu dans VBA, alors s'il vous plaît soyez aussi détaillé que possible. Merci


1 commentaires

Erreur de temps d'exécution 438 . L'objet ne prend pas en charge cette propriété ou cette méthode ... et il affiche la ligne putitrng.rows (1) = Activeheet.shapes ("ComboBox_Test"). Valeur


6 Réponses :


1
votes
activesheet.cells(1,putItRng.column).value=activesheet.combobox_test.value

1 commentaires

Vous devez faire référence par activeworkbook.activeHeet («Cause plusieurs classeurs chacun ont une feuille d'activité). Les lignes (1) vous donnent toute la gamme de toutes les colonnes de la rangée 1 ... Allez étape par étape. Essayez de trouver la source réelle du problème en utilisant deux msgbox, un pour le côté gauche, l'autre pour le côté droit de l'affectation suggérée ci-dessus. Cela fera mieux d'identifier ce qui est le problème. Je suppose que votre objet nommer est faux.



8
votes

Je ne suis pas sûr que c'est ce que vous voulez, mais c'est un début. L'objet de forme n'a pas de propriété de valeur, qui est la source de l'erreur. Il existe un objet déroulant qui est obsolète, mais toujours disponible. XXX


1 commentaires

Remarque, Dropdowns (et les combogoxes, les boutons, etc.) sont obsolètes car si vous choisissez de grouper plusieurs formes ensemble, les contrôles qui sont en groupe n'apparaissent pas dans ces objets de collecte. Donc, je suppose que ce commentaire est juste une prudence de ne pas mettre votre contrôle dans des formes groupées aussi longtemps que vous utilisez cette méthode (que j'utilise moi-même) :)



11
votes
   Sub QuickSelect_Change()
        With ActiveSheet.Shapes("QuickBox")
            MsgBox "My Selected Value " & .ControlFormat.List(.ControlFormat.ListIndex)
        End With
    End Sub

1 commentaires

Merci. Parfait!



3
votes
ActiveSheet.Shapes("combobox_test").ControlFormat.ListIndex

3 commentaires

Bien que cela puisse répondre à la question, il serait préférable d'expliquer pourquoi c'est la bonne solution.


La réponse votée la plus élevée fait référence à la collection Dropdowns, mais alain a mentionné que cela a été obsolète car "si vous choisissez de grouper plusieurs formes ensemble, des contrôles qui sont en groupe n'apparaissent pas dans ces objets de collecte". La collection de formes est un autre moyen de faire référence à un contrôle de forme Combobox, mais Carlos Post n'a pas fonctionné pour moi.


Je viens d'essayer ActiveHeet.shapes ("ComboBox_Test"). Controlformat.Value et a trouvé le même résultat. Certains scénarios pourraient trouver cela comme un style de codage plus approprié.



1
votes

Comme indiqué avant que la forme Combobox n'a pas de propriété de valeur.

J'utilise la propriété DrawingObject de l'objet de forme pour obtenir une case à cocher FormControl objet. Cette case à cocher peut ensuite être utilisée comme n'importe quel autre formulaire.

Vous devez également utiliser le DrawinObject pour obtenir le formoBox Objcet Former l'objet de forme.

Si vous souhaitez obtenir le texte sélectionné, vous pouvez essayer le code suivant Snipped: < / p> xxx


0 commentaires

0
votes

Merci de se battre avec ceci celui-ci mais ce sujet m'a donné une réponse. Je ne connais pas une différence de méthode1 ou de méthode2 Type de référence, la valeur peut être lue en utilisant .value | .list code> attributs. Il serait génial d'avoir une variable OBJ entièrement typée.

Dim obj As Object
Set obj = ws.DropDowns("combo1")  ' method 1
Set obj = ws.Shapes("combo1").ControlFormat  ' method 2
Debug.Print obj.value & "|" & obj.List(obj.value)  ' 1...n|Text1,Text2,..n
    


0 commentaires