Vêtements de langage de script de Microsoft Excel , Visual Basic pour Applications, dispose de nombreux outils pour étendre les capacités de défaut d'Excel . Un tel outil est la possibilité d' ajouter des contrôles (tels que les cases à cocher et des boutons ) directement sur les feuilles de calcul . Utilisation des contrôles de Visual Basic et sa capacité à puiser dans les fonctions de base d'Excel fait pour un tutoriel efficace dans l'amélioration Excel via Visual Basic pour Applications. Projet : Utiliser Visual Basic pour Calculer totaux
Entreprendre un projet de sous-totaux de calcul pour les colonnes d'une table de feuille de calcul . Commencez par ouvrir Excel et la création d' une table n'importe où dans la feuille de calcul . Le tableau est au début de la table dans l'Illustration 1.
Sélectionnez la table , y compris les en-têtes de colonne , et de créer le nom de " MyTab » dans ce tableau . Créer le nom en le saisissant dans le champ Nom d'Excel , ce qui est vers le coin supérieur gauche de l'espace de travail Excel.
Ajouter des contrôles Visual Basic
Ajouter cases à cocher pour la table , chaque case assis au-dessus d'une colonne de table. Vous pouvez trouver les cases à cocher sous Developer > Insérer > Contrôles de formulaire . En outre, ajouter deux boutons à la feuille de calcul. Faites glisser et déposez-les dans la même zone que les cases à cocher, à gauche et à droite de la table ma_table . Faites un clic droit sur le bouton gauche et changer son texte à lire " sous-totaux faire. " Changer le texte du bouton droit de "Supprimer les sous-totaux . "
Position des boutons et cases à cocher si votre table ressemble à la table à l'illustration 2 .
Écrire le code
maintenant que vous avez conçu la table et de ses commandes , vous écrivez le code qui fait les totaux sur la table. Entrez le Visual Basic IDE ( environnement de développement intégré ) et ajouter un module . Cliquez sur Insérer > Module . Dans la fenêtre de code du nouveau module , entrez ce code de programme :
Option Explicit
Public Sub doSubtotal ()
s As StringDim r Comme RangeDim c Comme ObjectDim ar () As IntegerDim IFIELD Comme IntegerDim varItemsDim nChkd As Integer
ReDim ar (0 à 0)
«Supprimer subtotalsRemoveSubtotals avant
« créer le tableau des indices des champs ( à partir de 1) au montant
IFIELD = 1nChkd = 0
'Boucle à travers des cases à cocher . Si l'on est contrôlé , ajouter son domaine à arrayFor Chaque c Dans ActiveSheet.CheckBoxes
( c.Value = 1) ThennChkd = nChkd + 1 ' ajouter ce domaine à un tableau
ar ( LimiteSup (ar) ) = iFieldReDim Preserve ar ( 0 à LimiteSup (ar) + 1) ' élément pour ajouter prochaine sélectionné champ et
End If
IFIELD = IFIELD + 1
Suivant
( nChkd = 0) ThenMsgBox ( "S'il vous plaît vérifier au moins une boîte . " ) Sortie SubEnd Si
ReDim Preserve ar ( 0 à LimiteSup (ar) - 1) ' Retirer vide dernières elementvarItems = ar
' Do montant réel . Tout d'abord, trouver la gamme à faire par rapport au montant de
Set r = Application.Names ( " ma_table " ) RefersToRange « récupérer la plage nommée au montant
GroupBy r.Subtotal : . = 1, la fonction : = xlSum , TotalList : = varItems , SummaryBelowData : = xlSummaryBelow
End Sub
RemoveSubtotals public Sub ()
' Vérifier l' avant -total, l'utilisation du stockage fourni par le commentaire domaine dans l'espace pour myTab (voir Formules > Gestionnaire de nom) ' Nous stockons original, la première colonne de la table. Si la colonne de départ du tableau actuel est différent , nous devons restaurer la table pour emplacement d'origine.
R As RangeDim s Comme StringDim nOrigCol As Integer
Set r = Application.Names ( " ma_table " ) . RefersToRanges = Application.Names ( " ma_table " ) . commentaire
" Aucun commentaire ne signifie run avant , donc pas de retrait du montant avant , ou le réglage de gamme originale, est nécessaire.
« Mais , sauver la colonne de départ de la table pour prochain appel à cette function.If (s = "") ThenApplication.Names ( " ma_table " ) Comment = r.ColumnExit SubEnd Si
Application.Range ( . "a1 : xfd65536 ». RemoveSubtotal
)« Réglage de la gamme : supprimer une colonne si l'on était addednOrigCol = CInt (s ) Si ( nOrigCol < r.Column ) Thenr.Previous.EntireColumn.Delete
End If Photos
End Sub
exécuter le programme
retour à la feuille de calcul Excel qui possède la table ma_table . Affecter les boutons pour les macros vous venez d'écrire . Faites un clic droit sur le bouton "Do -totaux " et sélectionnez " Affecter une macro. " Dans la boîte de dialogue qui s'affiche , sélectionnez la fonction « doSubtotal " , qui fait partie du code que vous venez d'écrire . Fermez la boîte de dialogue en cliquant sur " OK " et affecter l'autre fonction de la macro que vous avez écrit , RemoveSubtotals , à l'autre bouton.
Exécuter votre programme en cochant n'importe quelle combinaison de cases à cocher et en cliquant sur le bouton faire des sous-totaux. Effacer les sous-totaux en appuyant sur l'autre bouton .