Excel VBA ComboBox Identification
J'ai 4+ ComboBoxes sur un formulaire utilisateur. Quand ils tirent, ils tirent le même événement. Ce que j'essaie de faire est de trouver ce qui ComboBox a déclenché l'événement. Les zones de liste modifiables sont créés en fonction du nombre de pièces. Le code générer des ComboBoxes est indiqué ci-dessous:
For j = 0 To UBound(ComponentList) - 1
'Set Label
num = j + 1
Set control = UserForm1.Controls.Add("Forms.Label.1", "ComponentLabel" & CStr(num) & ":", True)
With control
.Caption = "Component " & CStr(num)
.Left = 30
.Top = Height
.Height = 20
.Width = 100
.Visible = True
End With
'set ComboBox
Set combo = UserForm1.Controls.Add("Forms.ComboBox.1", "Component" & num & ":", True)
With combo
.List = ComponentList()
.Left = 150
.Top = Height
.Height = 20
.Width = 50
.Visible = True
Set cButton = New clsButton
Set cButton.combobox = combo
coll.Add cButton
End With
Height = Height + 30
Next j
Cela fonctionne bien, et je peux récupérer la valeur choisie par l'utilisateur, MAIS je n'arrive pas à trouver la liste déroulante a été utilisé. Ce code ci-dessous est l'événement qui déclenche (clsButton
):
Public WithEvents btn As MSForms.CommandButton
Public WithEvents combobox As MSForms.combobox
Private combolist() As String
Private Sub btn_Click()
If btn.Caption = "Cancel" Then
MsgBox "Cancel"
Unload UserForm1
Variables.ComponentSelectionError = False
ElseIf btn.Caption = "Enter" Then
MsgBox "enter"
Unload UserForm1
Variables.ComponentSelectionError = True
End If
End Sub
Private Sub combobox_Click()
MsgBox combobox.Value
End Sub
Ce morceau de code ci-dessus a été aimablement réalisé par Doug Glancy pour obtenir les événements de travail avec le code généré ComboBoxes.
Comment puis-je obtenir la zone de liste déroulante qui a déclenché l'événement? c'est à dire le nom ou toute autre forme d'identification.
OriginalL'auteur NoLiver92 | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Au sein de la classe
.Name
n'apparaitra pas dans la liste intellisense pour la zone de liste déroulante commeMSForms.ComboBox
n'a pas en fait un nom de propriété lui-même (prendre un coup d'oeil dans le F2 explorateur d'objets), plutôt que la propriété est fourni par leControl
de la classe de base:OriginalL'auteur Alex K.
J'ai réussi à enfin répondre à ma propre question, après une recherche de plus de 500 pages (pris du temps)
c'est ce que j'ai utilisé et il fonctionne et se déclenche lorsque la certaines zones de liste modifiables sont cliqué:
espérons que cela peut être utilisé pour d'autres personnes qui en ont besoin.
OriginalL'auteur NoLiver92
Peut-être référence à btn.Zone de liste déroulante de nouveau? De la même façon que vous avez attribué à la zone de liste déroulante du bouton dans la première place, mais alors dans le sens inverse:
Ah, votre original post n'a pas dit que vous vouliez le (Nom), c'est juste que tu voulais "obtenir la zone de liste déroulante", j'ai donc pensé que vous avez voulu savoir sur l'objet, pas que vous voulez que le nom de l'objet... Merci pour la clarification
ok malade d'éditer le post
OriginalL'auteur K_B
Est-il une raison de ne pas seulement ajouter une propriété à votre classe personnalisée et définir la propriété lorsque vous vous inscrivez dans la Collection?
Module De Classe
Car vous avez besoin de beaucoup pour une cartographie des événements, je suppose que vous avez un appel commun-de retour dans votre code, de sorte que vous pourriez aussi le faire...
Dans un Module Standard
Dans clsButton (en remplaçant le gestionnaire d'événement)
OriginalL'auteur Cool Blue