2017-01-24 4 views
0

J'ai le code ci-dessous qui fonctionne parfaitement bien. Je suis simplement intéressé à savoir s'il existe une meilleure méthode pour choisir le nom de la feuille de travail.Capture du nom de la feuille de calcul sur le bouton ActiveX cliquez sur

Scénario: J'ai des feuilles de calcul «x» avec des boutons à bascule «n». Chaque bouton bascule contrôle les données affichées dans une feuille de calcul via les segments cachés. Les données à basculer sont simplement des zéros et des uns, donc je montre/cache "1" quand on clique sur le bouton bascule.

Le code:

Private Sub tgl_btn_Click() 
    Set InputSheet = Worksheets("My Worksheet") 
    Call do_filter("myvalue", tgl_btn.Value, "PivotTable1") 
End Sub 

do_filter prend le nom de la touche à bascule, ainsi que la valeur et le nom de la table pivotante à un module qui cache les valeurs/unhides dans la table de pivotement.

Ainsi, chaque bouton à bascule sur une feuille de calcul a la ligne suivante inclus avant l'appel du module:

Set InputSheet = Worksheets("My Worksheet") 

Est-il possible de ramasser ce nom de feuille de calcul sans coder en dur dans la logique sur chaque clic seul bouton ? La raison: Les utilisateurs renomment la feuille de calcul et donc suppriment la fonction du bouton bascule.

+2

Si le bouton bascule est sur la feuille, vous pouvez utiliser 'ActiveSheet' - vu que la feuille doit être active avant de pouvoir appuyer sur le bouton. –

+2

Plutôt que d'utiliser des boutons ActiveX, essayez les boutons Formulaire, vous pouvez les attacher tous au même sous-élément dans un module normal et utiliser Application.Caller pour déterminer lequel a été poussé. C'est l'objet bouton qui a été poussé: ActiveSheet.Buttons (Application.Caller) – jkpieterse

+0

@ DarrenBartrup-Cook Merci! 'Set InputSheet = ActiveSheet' fonctionne un régal. Simple vraiment. Je devenais un peu trop concentré sur le retour du nom de la feuille. – MiguelH

Répondre

2

La raison: la feuille de calcul utilisateurs renommer

Oui, les utilisateurs sont bons à casser le code VBA fragile - très bon fait!

Parfois, vous pouvez travailler sur le ActiveSheet - et c'est génial. Mais d'autres fois vous avez besoin d'obtenir une feuille de calcul spécifique, et l'utilisation de son Name vous laisse avec le même problème: les utilisateurs cassent des choses.

Recherchez et sélectionnez la feuille dans l'Explorateur de projet (Ctrl + R) et regarder vos Propriétés ToolWindow (F4) - remarquez la Name propriété correspond au nom que l'utilisateur peut changer sur un coup de tête:

My Awesome Sheet

Notez également, qu'il ya une propriété (Name), ici avec une valeur de Sheet1. Ceci est le CodeName de la feuille de calcul. VBA définit une variable d'objet de portée globale utilisant cet identifiant, vous pouvez le faire:

Set inputSheet = Sheet1 

Et cela fonctionnera indépendamment de ce que l'utilisateur renomme la feuille avec.