2012-07-17 6 views
2

J'ai beaucoup de boutons de commande ActiveX sur un grand nombre de feuilles de calcul différentes dans Excel.Référence à la cellule par rapport à un bouton de commande ActiveX VBA

Lorsque l'un des boutons est cliqué, je veux mettre une chaîne dans la cellule à côté du bouton.

Jusqu'à présent, cela a été tout à fait gênant que je ne peux pas demander au TopLeftCell du bouton comme un bouton Form control, seules les valeurs Top et Left du contrôle. Il n'est pas trivial de les transformer en Row et Column car il y a beaucoup de hauteurs/largeurs de cellules différentes dans chaque feuille. Je veux empêcher le codage en dur d'une position de cellule dans chaque button_Click() afin que je puisse déplacer le bouton sans problèmes, modifier la feuille, ... et ainsi je ne dois pas changer le code de chaque bouton quand soudainement le le texte doit apparaître 2 cellules à côté du bouton au lieu de 1 cellule.

Répondre

1

Vous pouvez utiliser cette approche de module de classe comme indiqué here by Andrew Poulson pour répondre à tous les boutons

Je ne comprends pas votre commentaire re TopLeftCell - il est disponible pour un bouton ActiveX

Class Module

`named as Class1 

Public WithEvents ButtonGroup As CommandButton 

Private Sub ButtonGroup_Click() 
    Sheets(ButtonGroup.Parent.Name).Cells(ButtonGroup.TopLeftCell.Row, ButtonGroup.TopLeftCell.Column) = "Done" 
End Sub 

Normal Module

Dim Buttons() As New Class1 

Sub Class_Init() 
    Dim Sh As Worksheet 
    Dim Obj As OLEObject 
    Dim ButtonCount As Integer 
    For Each Sh In ThisWorkbook.Worksheets 
     For Each Obj In Sh.OLEObjects 
      If TypeName(Obj.Object) = "CommandButton" Then 
       ButtonCount = ButtonCount + 1 
       ReDim Preserve Buttons(1 To ButtonCount) 
       Set Buttons(ButtonCount).ButtonGroup = Obj.Object 
      End If 
     Next Obj 
    Next Sh 
End Sub 
+1

Merci! Et vous avez absolument raison, la topleftcell est également disponible pour les boutons ActiveX – Aerus

Questions connexes