Access VBA: Est-il possible de réinitialiser erreur de manipulation
Je suis en utilisant dans la première partie de mon programme
sur l'erreur d'aller sur démarrer
Supposons que dans ma deuxième partie, je suis de nouveau à l'aide de
on error resume next
Cette seconde erreur piège n'obtiendrez pas activé tant que le premier sera toujours actif. Est-il possible de désactiver le premier gestionnaire d'erreur après qu'il a été utilisé?
Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True
On Error GoTo Openwb
wbExists = False
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
wbExists = True
Openwb:
On Error GoTo 0
If Not wbExists Then
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Set objSht = wbexcel.Worksheets("Sheet1")
End If
On Error GoTo 0
Set db = DBEngine.opendatabase("C:\book.mdb")
Set rs = db.OpenRecordset("records")
Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection
For Each tdf In CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
rs.MoveFirst
strsql = "SELECT * From [" & tdf.Name & "] WHERE s=15 "
Do While Not rs.EOF
On Error Resume Next
rs2.Open strsql
Lors de l'exécution de la dernière instruction, je veux ignorer l'erreur et de passer à la table d'à côté, mais erreur de manipulation ne semble pas fonctionner.
OriginalL'auteur tksy | 2008-12-01
Vous devez vous connecter pour publier un commentaire.
Il est presque toujours préférable d'éviter les erreurs, plutôt que de les manipuler. Par exemple:
Chipoter: en VBA, il est plus efficace lors de l'essai pour une chaîne de longueur nulle à usee vbNullString au lieu de "" parce que l'Accès constant a déjà son mémoire allouée. Il n'a pas d'importance dans cette constante, mais il est bon de prendre l'habitude de sorte que vous utilisez toujours vbNullString à l'intérieur des boucles.
Error GoTo 0" est exactement cela. Il retourne VBA à son habitude, la gestion des erreurs. Cela ne veut pas dire "on Error GoTo Start" qui, je pense, votre question implique.
Votre commentaire est vrai, mais il y a certains endroits où ce ne peut pas être fait. De toute façon, où l'on peut éviter cette "Erreur" de la manipulation que l'on devrait essayer de l'utiliser
C'est techniquement correct, mais ne répond pas à la question. C'est une question simple, vraiment: "est-il un moyen de réinitialiser erreur de manipulation"
OriginalL'auteur Fionnuala
On error goto 0
donner la main à visual basic pour le traitement des erreurs (en général de la boîte de message)On error goto label
va rediriger votre code de étiquette:On error resume next
va ignorer l'erreur et de continuerResume next
rediriger le code à la ligne suivante après l'erreur est généréecela signifie que les combinaisons d'instructions telles que
ne font pas sens
Et si vous souhaitez rediriger une "erreur" d'instruction que vous avez à faire de cette façon:
Si vous souhaitez rediriger l'erreur à un label (pour le traitement ou autre) et ensuite revenir à l'endroit du code où l'erreur s'est produite, vous devez écrire quelque chose comme:
Mais vraiment, je vous conseille d'être plus rigoureux sur votre gestion d'erreur. Vous devez d'abord être en mesure de faire quelque chose comme ça:
La prochaine étape sera d'anticiper les erreurs dans votre code, de sorte que l'objet err, ne sera pas augmenté. Vous pouvez par exemple écrire une fonction générique comme celui-ci:
Vous pouvez alors profiter de cette fonction dans votre code par les tests de l'existence de votre fichier xls:
Vous n'avez pas besoin de votre wbExist variable... plus
De la même manière, vous devez anticiper le cas où votre jeu d'enregistrements a pas de documents. L'écriture en bas de rs.MoveFirst avant le test, il pourrait générer une erreur. Vous devez ensuite rédiger
OriginalL'auteur Philippe Grondier
Vous avez besoin pour effacer l'erreur. Essayez de mettre ce code dans:
Vous pouvez également utiliser Err.Le nombre des cas d'erreur.
Je ne pense pas que c'est toujours une bonne idée de simplement ignorer toutes les erreurs. Que faire si vous jetez une erreur vous attendons pas?
David, un bon point. C'est pourquoi j'ai dit que vous pouvez utiliser Err.Le nombre des cas d'erreur. Plutôt que de faire un générique clair, clair, si l'erreur est celui que vous attendiez.
OriginalL'auteur Jason Z
essayer
Pour plus d'aide, regardez ici: http://msdn.microsoft.com/en-us/library/bb258159.aspx
Pourriez-vous poster votre code source ici? Peut-être que vous utilisez sur les déclarations d'erreurs de manière incorrecte.
OriginalL'auteur Dirk Vollmar
Il y a une différence entre une réponse et une solution. Parfois, nous avons juste besoin d'une réponse, les mises en garde apprécié, et laissez-nous savoir par expérience que ce n'est pas vraiment une bonne solution. Cela étant dit, j'ai trouvé cette:
Vous avez besoin pour utiliser Sur Error GoTo -1 ou Err.Clear pour réinitialiser la récupération d'erreur.
Vérifier cette réponse j'ai posté il y a quelques mois pour une explication plus détaillée.
OriginalL'auteur Eric Vaughn-Shobey