IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

informer

VBA - Erreur 91 - Variable objet non définie (1)

Noter ce billet
par , 08/10/2021 à 20h30 (1214 Affichages)
Généralement une erreur arrête l'exécution du code et j'ai donc ce modèle


Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function myFunction ()
 
 On Error GoTo Err_
     ... Code
 
Exit_:
 
Exit function
 
Err_:
 
    sMsg = Err.Number & char(13) & Err.Description
    Goto Exit_
 
End function



Quand je clos/quite/ libére des objets après Exit_: naïf que je suis, je pensais que la commande On error Resume next placée juste après Exit_: permettait d'ignorer toute erreur provoquée par une ligne de code placee après On error.

Mais bizarrement non, en tout cas pas pour l'erreur 91.

Pour contourner ce problème, j'ai créé une fonction mfDAOCloseObj dans un module

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Public Function mfDAOCloseObj(poObj As Object)
 
    If Not poObj Is Nothing Then poObj.colose
    Set poObj = Nothing
 
End Function

Donc en appelant cette fonction après l'étiquette Exit_: je suis sur que mon objet est correctement libéré

J'ai créé aussi une fonction mfDAOQuitObj toujours dans le même module
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Public Function mfDAOQuitObj(poObj As Object)
 
    If Not poObj Is Nothing Then poObj.Quit
    Set poObj = Nothing
 
End Function


J'ai par exemple

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Exit_:
 
....  
    Call mfDAOCloseObj(goDAORset)
    Call mfDAOCloseObj(goDAODb)
 
    Exit Function
 
Err_:
 
    gsMsgErr = Err.Number & Chr(13) & Err.Description
    MsgBox gsMsgErr
    GoTo Exit_
 
End Function

Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Viadeo Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Twitter Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Google Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Facebook Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Digg Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Delicious Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog MySpace Envoyer le billet « VBA - Erreur 91 - Variable objet non définie (1) » dans le blog Yahoo

Mis à jour 04/11/2021 à 05h57 par informer

Catégories
ODBC DAO ADODB

Commentaires

  1. Avatar de Pierre Fauconnier
    • |
    • permalink
    Salut.

    Dans quelles circonstances as-tu une erreur de ce genre? Tu peux donner un bout de code et un mode opératoire pour que l'on puisse reproduire? Quelles sont tes options de gestion d'erreur dans les options VBA?

    Cela étant, perso, je n'aime pas du tout les EXIT et encore moins les GOTO Exit_...
    Mis à jour 09/10/2021 à 19h09 par Pierre Fauconnier
  2. Avatar de informer
    • |
    • permalink
    Citation Envoyé par Pierre Fauconnier
    Salut.

    Dans quelles circonstances as-tu une erreur de ce genre? Tu peux donner un bout de code et un mode opératoire pour que l'on puisse reproduire? Quelles sont tes options de gestion d'erreur dans les options VBA?

    Cela étant, perso, je n'aime pas du tout les EXIT et encore moins les GOTO Exit_...

    Bonjour Pierre,

    Exemple : Ouverture d'un fichier Excel depuis MsAccess et plantage (Erreur code / ODBC...) après instanciation d'un objet Excel (Application.Excel) -> Toujours sortie propre pour l'objet Excel !
    Mis à jour 04/11/2021 à 06h02 par informer