Une macro Excel pour déterminer si un classeur est ouvert

Comme vous pensez à ouvrir automatiquement des classeurs Excel, envisager ce qui peut arriver si vous essayez d'ouvrir un livre qui est déjà ouvert. Dans le monde non-VBA, Excel tente d'ouvrir le fichier à nouveau, avec le message ci avertissant que les modifications non enregistrées seront perdues. Vous pouvez vous protéger contre un tel événement en vérifiant si un fichier donné est déjà ouverte avant d'essayer de l'ouvrir à nouveau.

Sommaire

Éviter ce message d'avertissement.
Éviter ce message d'avertissement.

Comment les œuvres macro

La première chose à noter à propos de cette macro est qu'il est une fonction, pas une procédure Sub. Comme vous le verrez, ce qui en fait une fonction macro vous permet de passer un nom de fichier à elle de tester si ce fichier est déjà ouvert.

L'essentiel de ce code est simple. Vous tester un fichier donné pour voir si elle peut être affectée à une variable objet. Seulement classeurs ouverts peuvent être affectées à une variable objet. Lorsque vous essayez d'attribuer un classeur fermé à la variable, une erreur se produit.

Si le classeur donné peut être affecté, le classeur est ouvert si une erreur se produit, le classeur est fermé.

Fonction FileIsOpenTest (TargetWorkbook As String) Comme Boolean'Step 1: Déclarez votre variablesDim TestBook Comme Workbook'Step 2: Parlez Excel reprendre le errorOn Error Resume Next'Step 3: Essayez d'attribuer le classeur cible à TestBookSet TestBook = classeurs (TargetWorkbook) «Étape 4: Si une erreur survient, classeur est déjà openIf Err.Number = 0 = TrueElseFileIsOpenTest ThenFileIsOpenTest = FalseEnd IfEnd Fonction

La première chose que fait la macro est de déclarer une variable String qui va contenir le nom de fichier que l'utilisateur choisit. TestBook est le nom de votre variable String.




Dans l'étape 2, vous dites Excel qu'il peut y avoir une erreur d'exécuter ce code et, dans le cas d'une erreur, reprendre le code. Sans cette ligne, le code serait tout simplement arrêter quand une erreur se produit. Encore une fois, vous testez un fichier donné pour voir si elle peut être affectée à une variable objet. Si le classeur donné peut être attribué, il est ouvert en cas d'erreur, il est fermé.

Dans l'étape 3, vous tentez d'affecter le classeur donné à l'objet variable TestBook. Le classeur que vous essayez d'attribuer est une variable String appelé TargetWorkbook. TargetWorkbook est passé à la fonction dans les déclarations de fonctions (voir la première ligne du code). Cette structure élimine le besoin de coder en dur un nom de classeur, vous permettant de passer comme une variable à la place.

Dans l'étape 4, vous vérifiez simplement pour voir si une erreur est survenue. Si une erreur n'a pas eu lieu, le classeur est ouvert, de sorte que vous réglez le FileIsOpenTest True. Si une erreur se produit, le classeur est pas ouvert et que vous définissez l'FileIsOpenTest False.

Encore une fois, cette fonction peut être utilisée pour évaluer tout fichier que vous lui passez, via son argument TargetWorkbook. Ceci est la beauté de mettre la macro dans une fonction.

La macro suivante montre comment implémenter cette fonction. Ici, vous appelez la nouvelle fonction de FileIsOpenTest faire en sorte que l'utilisateur ne peut pas ouvrir un fichier déjà ouvert:

Sub Macro1 () 'Etape 1: définir une chaîne variableDim FName Comme VariantDim FNFileOnly Comme String'Step 2: Méthode de dialogue boxFName GetOpenFilename = Application.GetOpenFilename (_FileFilter active: = "classeurs Excel, * XL *.", _title: = "Choisissez Un document de travail ouvert ", _MultiSelect: = False) 'Étape 3: Ouvrez le fichier choisi, si pas déjà openedIf FName lt;> Faux ThenFNFileOnly = StrReverse (Gauche (StrReverse (FName), _InStr (StrReverse (FName), "") - 1)) Si FileIsOpenTest (FNFileOnly) = Vrai ThenMsgBox "Le fichier donné est déjà ouvert" ElseWorkbooks.Open Nom du fichier : = FNameEnd IfEnd Sous IfEnd

Avec cette macro mis en œuvre, vous obtenez la boîte de message amical montré.

Un message plus propre, plus concis.
Un message plus propre, plus concis.

Comment utiliser la macro

Pour mettre en œuvre cette macro, vous pouvez copier et coller les deux morceaux de code dans un module standard:

  1. Activer Visual Basic Editor en appuyant sur Alt + F11.

  2. droit; cliquez sur le nom du projet / classeur dans la fenêtre de projet.

  3. Choisissez Insertion-Module.

  4. Tapez ou collez le code dans le module nouvellement créé.

  5. (Facultatif) Affectez la macro à un bouton.


» » » » Une macro Excel pour déterminer si un classeur est ouvert