VB : Fonctionnement d'un "On error goto next" pour récupérer ceci

VB : Fonctionnement d'un "On error goto next" pour récupérer ceci - VB/VBA/VBS - Programmation

Marsh Posté le 30-04-2002 à 06:19:57    

Private Sub Drive1_Change()
 
On Error GoTo apra
Dir1.path = Drive1.Drive
 
apra:
Dir1.path = "c:\"
 
End Sub
 
******************************
 
Si je prend un lecteur de cd vide, je reçois tout de même une erreur irrécupérable ( Error 68 : Device unavailable ).
 
Comment je peux faire ? Ça devrait pas être trop dur mais je vois vraiment pas comment faire. :(

Reply

Marsh Posté le 30-04-2002 à 06:19:57   

Reply

Marsh Posté le 30-04-2002 à 10:07:19    

Private Sub Drive1_Change()
 
On Error GoTo apra
Dir1.path = Drive1.Drive
 
apra:
    select case err.number
        case 68: Dir1.path = "c:\"
    end select
 
End Sub

Reply

Marsh Posté le 30-04-2002 à 13:57:24    

Ne pas oublier l'exit sub avant l'étiquette (sinon, on y passe sans erreur) et de mettre On Error Goto 0 en quittant le module, sinon, la prochaine erreur sera bien déroutée dans un autre Sub et provoquera un symptôme étrange car voudra "sauter" ici.  
 
Sauf erreur de vieux souvenirs de VB3, je vois ça comme (copyright Karlkox):
Private Sub Drive1_Change()  
 
On Error GoTo apra  
Dir1.path = Drive1.Drive  
On Error GoTo 0
exit sub
 
apra:  
   select case err.number  
       case 68: Dir1.path = "c:\"
   end select  
   Resume next ' on passe à la ligne qui suit l'erreur
End Sub

Reply

Marsh Posté le 30-04-2002 à 18:48:29    

essayez le code que vous venez de me donner... je reçois exactement la même erreur à la meme ligne :(

Reply

Marsh Posté le 30-04-2002 à 20:43:48    

Un4GivN a écrit a écrit :

essayez le code que vous venez de me donner... je reçois exactement la même erreur à la meme ligne :(  




 
Chez moi, le code focntionne parfaitement. J'ai juste ajouté une ligne pour que ce soit encore mieux (mise à jour du contrôle "drive1" en "C:\" en cas d'erreur.
 
Tu as quel VB et quel système d'exploitation ?
 
Private Sub Drive1_Change()
 
On Error GoTo apra
Dir1.Path = Drive1.Drive
 
On Error GoTo 0
Exit Sub
 
apra:
  Select Case Err.Number
      Case 68:
      Drive1.Drive = "c:\"
      Dir1.Path = "c:\"
  End Select
  Resume Next
 
End Sub

Reply

Marsh Posté le 30-04-2002 à 21:46:46    

jai vb6, winXP pro Fr... ca ne fonctionne tjrs pas :(

Reply

Marsh Posté le 02-05-2002 à 08:54:27    

Ca doit venir de Win XP !  :(  :(  
 
J'ai un pb analogue avec le C sous Win 2000. La détection du caractère "removable" de mon ZIP. Sous tous Windows (3.11/95/98, NT pas encore vérifié), ZIP vide reconnu comme "removable". Sous 2K, si vide : vide. La mode a changé. :fou:  
 
Cf site microsoft ?? Y a peut-être truc à changer (acheter un VB plus récent ??). Si le prog est compilé sous un autre Windows, ça fait pareil (si oui, c'est intrinsèque à XP) ?

Reply

Marsh Posté le 02-05-2002 à 10:01:32    

Si c'est insortable, faudrait essayer (j'ai recopié de mon code C)
 
UINT    uErrMode; (int en VB ça doit aller)
 
     // Empêche message du système quand y a erreur
     uErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
 
Accès à la fonction qui "craint" avec déroutage classique par On Erroro Goto en VB (retour de valeur en C)
 
     // revalide le déroutement d'erreur comme était avant
     SetErrorMode(uErrMode);
 
Ca empêche un message du système quand y a un disque absent par ex. On veut récupérer l'erreur (elle vient après) mais Windows prend les devants avec un massif : "lecteur non disponible" avec un gros "MessageBeep".
 
Faudrait que je cherche (guère le temps ce matin) la valeur symbolique de SEM_FAILCRITICALERRORS dans les fichiers .h.

Reply

Marsh Posté le 02-05-2002 à 10:36:39    

Les variables sont dans winbase.h
 
#define SEM_FAILCRITICALERRORS      0x0001
#define SEM_NOGPFAULTERRORBOX       0x0002
#define SEM_NOALIGNMENTFAULTEXCEPT  0x0004
#define SEM_NOOPENFILEERRORBOX      0x8000
 
int ErrM
ErrM = SetErrorMode(1)
..
fonction critique
..
SetErrorMode(ErrM)  
 
devrait peut-être aider à intercepter l'interception Windows.
(Faut quand même les On Error Goto pour les traîter quand on a "la main" ).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed