par , 08/10/2021 à 19h30 (2039 Affichages)
Généralement une erreur arrête l'exécution du code et j'ai donc ce modèle
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
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
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
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 |