Foutafhandeling

Status
Niet open voor verdere reacties.

oosterbaan S S

Gebruiker
Lid geworden
13 mrt 2005
Berichten
128
Hallo

Voor foutafhandeling heb ik een module gemaakt met de naam "Foutcodes"
Hierin een selectie van Case Err

bij een knop op een formulier heb ik de volgende code:

Private Sub knp_Acquistieorderform_print_en_mail_Click()
On Error GoTo Err_FoutCode
Dim stDocName As String

stDocName = "Mcr Klantenacquisitie orderformulier printen en verzenden"
DoCmd.RunMacro stDocName

Exit_knp_Acquistieorderform_print_en_mai:
Exit Sub

Err_FoutCode:
Call FoutCodes
Resume Exit_knp_Acquistieorderform_print_en_mai

End Sub


Helaas wordt bij een Err mijn module niet opgeroepen, maar krijg ik de melding:
Compileerfout
Er wordt een variabele of procedure verwacht, geen module.

Wat heb ik fout gedaan??
Bedankt alvast.
Groeten


Hieronder nog even de inhoud van mijn module:

Function FoutCodes()

Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Style = vbOKOnly + vbInformation + vbDefaultButton2

Select Case Err
Case 70: Msg = "Fout bij het lezen of schrijven van het bestand!"
Case 94: Msg = "U heeft geen record geselecteerd!"
Case 2105: Msg = "Kan niet naar het record gaan!"
Case 2046: Msg = "Het E-mail programma op de computer is niet juist geconfigureerd, U kunt geen E-mail verzenden!"
Case 2501: Msg = "Het verzenden van de Email is door U geannuleerd."
Case 3075: Msg = "U heeft geen record geselecteerd!"
Case Else: Msg = Err & " " & Err.Description
End Select
Response = MsgBox(Msg, Style, Koptekst)
DoCmd.Hourglass False
End Function
 
Gebruik geen
Code:
Call FoutCodes
maar laat de Call weg.
Nog iets:
Stop de error waarde in een variabele van het type long:
Code:
Dim lngError as long
...
lngError = Err
en geef lngError als een parameter mee aan je procedure aanroep:
Code:
FoutCodes lngError
(ik zou hem zelf ErrorProc noemen maar dat even terzijde.)

Geef je gedimensioneerde variabelen een type.
Code:
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Maakt allemaal variabelen aan van het type variant.
Code:
Public Function FoutCodes(lngError as long)
Dim Msg as string
dim Style as string

'Of nog mooier:
dim  strTitle as string
dim strHelp as string
dim strCtxt as string
dim strResponse as string
dim strMyString as string

en verder:
Code:
  Style = vbOKOnly + vbInformation ' + vbDefaultButton2 'Er is geen tweede button: Ok ONLY(!)

  Select Case lngError
    Case 70: Msg = "Fout bij het lezen of schrijven van het bestand!"
    Case 94: Msg = "U heeft geen record geselecteerd!"
    Case 2105: Msg = "Kan niet naar het record gaan!"
    Case 2046: Msg = "Het E-mail programma op de computer is niet juist geconfigureerd, U kunt geen E-mail verzenden!"
    Case 2501: Msg = "Het verzenden van de Email is door U geannuleerd."
    Case 3075: Msg = "U heeft geen record geselecteerd!"
    Case Else: Msg = Err & " " & Err.Description
  End Select
  MsgBox Msg, Style, Koptekst
  DoCmd.Hourglass False
End Function

Ik ga eten.
 
Laatst bewerkt:
Hallo oosterbaan,

de naam van je module mag niet hetzelfde zijn als de naam van je funktie.
Pas je modulenaam aan, bijv. naar mdlFoutcodes.

Groet,

Tardis
 
reactie op Foutafhandeling

Beste Guus2005 en Tardis

Hartelijk dank voor de supersnelle reactie.
Ik heb jullie aanwijzigingen opgevolgd maar krijg nu bij het indrukken van de knp op het formulier de volgende melding:

Fout 2427 tijdens uitvoering: u heeft een expressie zonder waarde opgegeven.

Ik denk dat ik ergens nog een foutje heb zitten (ben ook gen ster in het VBA).
Als jullie er nog even naar willen kijken? Bedankt maar weer….

Hieronder mijn vba bij de knp op het formulier:

Private Sub knp_Acquistieorderform_print_en_mail_Click()
On Error GoTo Err_Foutcode

Dim stDocName As String
Dim IngError As Long

stDocName = "Mcr Klantenacquisitie orderformulier printen en verzenden"
DoCmd.RunMacro stDocName

IngError = Err

Exit_knp_Acquistieorderform_print_en_mai:
Exit Sub

Err_Foutcode:
FoutCodes IngError
Resume Exit_knp_Acquistieorderform_print_en_mai

End Sub

En hier de module (is genaamd MdlFoutcodes)

Option Compare Database

Public Function FoutCodes(lngError As Long)

Dim strMSG As String
Dim strStyle As String
Dim strTitle As String
Dim strHelp As String
Dim strCtxt As String
Dim strResponse As String
Dim strMyString As String
Style = vbOKOnly + vbInformation + vbDefaultButton2 'Er is geen tweede button: Ok ONLY(!)

Select Case lngError
Case 70: Msg = "Fout bij het lezen of schrijven van het bestand!"
Case 94: Msg = "U heeft geen record geselecteerd!"
Case 2105: Msg = "Kan niet naar het record gaan!"
Case 2046: Msg = "Het E-mail programma op de computer is niet juist geconfigureerd, U kunt geen E-mail verzenden!"
Case 2427: Msg = " U dient alle velden in het formulier te vullen!"
Case 2501: Msg = "Het verzenden van de Email is door U geannuleerd."
Case 3075: Msg = "U heeft geen record geselecteerd!"
Case Else: Msg = Err & " " & Err.Description
End Select
MsgBox Msg, Style, Koptekst
DoCmd.Hourglass False
End Function
 
Zet bovenin je module onder

Code:
Option Compare Database

ook nog de tekst:

Code:
Option Explicit

Als je dan compileert krijg je de melding dat Msg niet is gedefinieerd en waarschijnlijk nog een paar andere meldingen. Los die eerst op.

Succes!
 
Pas je code even aan. Het heeft alleen maar zin om lngError een waarde te geven als er een fout is. Ik heb hem gelijk even versimpeld.
Code:
Private Sub knp_Acquistieorderform_print_en_mail_Click()
On Error GoTo Err_Foutcode

    Dim stDocName As String
        
    stDocName = "Mcr Klantenacquisitie orderformulier printen en verzenden"
    DoCmd.RunMacro stDocName
        
Exit_knp_Acquistieorderform_print_en_mai:
    Exit Sub

Err_Foutcode:
    [B]FoutCodes Err, Err.Description [/B]    Resume Exit_knp_Acquistieorderform_print_en_mai
    
End Sub
Code:
Option Compare Database
[B]Option Explicit[/B]

Public Function FoutCodes(lngError As Long[B], strErrorDescription as string[/B])

Dim [B]str[/B]MSG As String
Dim [B]str[/B]Style As String
Dim [B]str[/B]Title As String

strStyle = vbInformation [B]'Al het andere is default[/B]
[B]strTitle = "Let Op: Grote Foud!"[/B]

  Select Case lngError
    Case 70: [B]str[/B]Msg = "Fout bij het lezen of schrijven van het bestand!"
    Case 94: [B]str[/B]Msg = "U heeft geen record geselecteerd!"
    Case 2105: [B]str[/B]Msg = "Kan niet naar het record gaan!"
    Case 2046: [B]str[/B]Msg = "Het E-mail programma op de computer is niet juist geconfigureerd, U kunt geen E-mail verzenden!"
    Case 2427: [B]str[/B]Msg = " U dient alle velden in het formulier te vullen!"
    Case 2501: [B]str[/B]Msg = "Het verzenden van de Email is door U geannuleerd."
    Case 3075: [B]str[/B]Msg = "U heeft geen record geselecteerd!"
    Case Else: [B]str[/B]Msg = lngErr [B]& vbcrlf & vbcrlf & strErrorDescription[/B]
  End Select
  MsgBox [B]str[/B]Msg , strStyle[B], strTitle[/B]
  [B]' DoCmd.Hourglass False ' Wat je niet aanzet hoef je niet uit te zetten.[/b]
End Function
Enjoy!
 
Laatst bewerkt:
Beste Guus,

Ik heb de laatste aanpassingen meegenomen, maar krijg nog steeds niet een foutafhandeling uit de module MdlFoutcodes, maar bijgaande VBA foutmelding:

fout 2427 tijdens uitvoering
U heeft een expressie zonder waarde opgegeven

Hierbij nogmaals mijn aangepaste vba bij de knp op het formulier en de aangepaste module.
Ik hoop dat je er nog eens naar wil kijken.
Bedankt.

Private Sub knp_Acquistieorderform_print_en_mail_Click()
On Error GoTo Err_Foutcode

Dim stDocName As String

stDocName = "Mcr Klantenacquisitie orderformulier printen en verzenden"
DoCmd.RunMacro stDocName

Exit_knp_Acquistieorderform_print_en_mai:
Exit Sub

Err_Foutcode:
FoutCodes Err, Err.Description
Resume Exit_knp_Acquistieorderform_print_en_mai

End Sub

en mijn module Mdlfoutcodes:

Option Compare Database
Option Explicit

Public Function FoutCodes(lngError As Long, strErrorDescription As String)

Dim strMSG As String
Dim strStyle As String
Dim strTitle As String

strStyle = vbInformation 'Al het andere is default
strTitle = "Let Op: Grote Foud!"

Select Case lngError
Case 70: strMSG = "Fout bij het lezen of schrijven van het bestand!"
Case 94: strMSG = "U heeft geen record geselecteerd!"
Case 2105: strMSG = "Kan niet naar het record gaan!"
Case 2046: strMSG = "Het E-mail programma op de computer is niet juist geconfigureerd, U kunt geen E-mail verzenden!"
Case 2427: strMSG = " U dient alle velden in het formulier te vullen!"
Case 2501: strMSG = "Het verzenden van de Email is door U geannuleerd."
Case 3075: strMSG = "U heeft geen record geselecteerd!"
Case Else: strMSG = lngErr & vbCrLf & vbCrLf & strErrorDescription
End Select
MsgBox strMSG, strStyle, strTitle
End Function
 
Doe dit bij het zien van de foutmelding: control-break.
Je zal dan zien waar de fout zich precies bevindt.
Van daaruit moet je verder redeneren.

Zet die Option Explicit ook in je CBF (Code behind form)

Als je ná het proberen er nog niet uitkomt moet je je database hier maar even neerzetten. Wel even compacten en zippen. Zie ook thread 270959

Oh ja, je fout kan ook nog in die macro zitten die je aanroept!
 
Laatst bewerkt:
Beste Guus

Ik heb het nu voor elkaar. Er zat nog een foutje in deze regel:
Case Else: strMSG = lngErr & vbCrLf & vbCrLf & strErrorDescription

Moet zijn: Case Else: strMSG = lngError & vbCrLf & vbCrLf & strErrorDescription

Nu nog een laatste vraag:

In het betreffende formulier moeten een aantal velden 'vereist' ingevuld zijn.
Als ik de knop indruk op het formulier en 3 velden zijn niet ingevuld, krijg ik ook 3 maal de foutmelding.
Kun je het ook zo instellen dat je 1 maal de foutmelding krijgt ?

Tot zover heel hartelijk dank. Echt super, zoveel inzet :thumb:
 
Hallo,

Code:
Kun je het ook zo instellen dat je 1 maal de foutmelding krijgt ?

Instellen niet.
Wellicht dat je mbv VBA kunt afvangen dat een bepaalde foutmelding al is opgetreden.
Als dat al kan, is dat niet eenvoudig.

Groet,

Tardis
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan