Ce didacticiel discutera de la différence entre VBA ActiveWorkbook et ThisWorkbook.
ActiveWorkbook vs ThisWorkbook
Il est important de connaître la différence entre ActiveWorkbook et ThisWorkbook en VBA :
L'ActiveWorkbook est le classeur actuellement actif (de la même manière qu'ActiveSheet est la feuille actuellement active). ThisWorkbook est le classeur dans lequel le code VBA est stocké. Ce classeur ne changera jamais.
Ce classeur
Considérez ThisWorkbook comme une variable objet qui vous permet de référencer le classeur contenant le code en cours d'exécution.
Ce code affichera une MessageBox avec le nom ThisWorkbook :
123 | Sous Show_ThisWorkbook()MsgBox ThisWorkbook.NameFin du sous-marin |
Cahier de travail actif
L'ActiveWorkbook est une variable objet qui vous permet de référencer le classeur actuellement actif.
Ce code affichera une MessageBox avec le nom ActiveWorkbook :
123 | Sous Show_ActiveWorkbook()MsgBox ActiveWorkbook.NameFin du sous-marin |
VBA suppose ActiveWorkbook
Lorsque vous essayez de travailler avec des objets (par exemple Sheets) dans ActiveWorkbook, vous n'avez pas besoin d'indiquer explicitement l'objet ActiveWorkbook. VBA supposera que vous faites référence à ActiveWorkbook.
Donc ça:
1 | ActiveWorkbook.Sheets("Sheet1").Range("$A$5").Valeur = 1 |
C'est la même chose que ça :
1 | Sheets("Sheet1").Plage("$A$5").Valeur = 1 |
Les classeurs nouveaux ou ouverts sont actifs
Chaque fois que vous créez un nouveau classeur ou ouvrez un classeur, le classeur devient « Actif ». Vous pouvez voir par vous-même avec ce code qui ajoutera un classeur et récupérera le nom du nouveau classeur :
1234 | Sous Show_ActiveWorkbook_Add()Classeurs.AjouterMsgBox ActiveWorkbook.NameFin du sous-marin |
Après avoir ajouté ou ouvert un classeur, vous pouvez l'affecter à une variable à l'aide de l'objet ActiveWorkbook. Nous allons vous montrer comment dans les exemples ci-dessous :
Exemples de ThisWorkbook et ActiveWorkbook
Changer de classeur actif
Basculez le classeur actif à l'aide du nom du classeur :
1 | Classeurs("Livre1").Activer |
Basculez le classeur actif à l'aide du numéro de commande de la feuille de calcul (1 est la première feuille de calcul d'un classeur)
1 | Classeurs(1).Activer |
Activer ce classeur
Faites de ThisWorkbook (où le code en cours d'exécution est stocké) le ActiveWorkbook :
1 | Ce classeur.Activer |
Définir ActiveWorkbook sur une variable
Attribuez l'ActiveWorkbook à une variable d'objet de classeur :
12 | Dim wb comme classeurDéfinir wb = ActiveWorkbook |
Fermer et enregistrer le classeur actif
Ferme et enregistre le classeur actif :
1 | ActiveWorkbook.Close SaveChanges:=True |
Fermer le classeur actif sans enregistrer
Ferme l'ActiveWorkbook sans enregistrer :
1 | ActiveWorkbook.Close SaveChanges:=False |
ActiveWorkbook - Enregistrer sous
Effectue un enregistrement sous du classeur actif.
123456789 | Sub SaveAsActiveWorkbook()Résultat faible En tant que varianteresult = Application.GetSaveAsFilename(InitialFileName:="", _FileFilter:="Classeur Excel prenant en charge les macros (*.xlsm), *.xlsm, Classeur Excel (*.xlsx), *.xlsx")Si résultat = Faux Alors RetourRésultat ActiveWorkbook.SaveAsFin du sous-marin |