Newsgroup: it.comp.appl.access
Titolo: Consigli su funzione per "camuffare" messaggi errore di Access

Salve,
come consiglia spesso il buon Alex Baraldi, ho voluto provare a
razionalizzare una parte di codice che si ripete spesso in due
maschere.
Per far ciò, ho creato la seguente funzione:
Public Function fErrore()
  Const Err3101 = 3101
  Const Err2501 = 2501
  Const Err3021 = 3021
  Dim sMessaggio As String
  Dim sTitolo As String
  Dim iStile As Integer
  If (err = Err3101) Then
    sMessaggio = "Scegli un cliente dall'elenco clienti."
    iStile = vbExclamation + vbOKOnly
    sTitolo = "Richiesta selezione cliente"
    MsgBox sMessaggio, iStile, sTitolo
  ElseIf (err = Err2501) Or (err = Err3021) Then
  Else
    MsgBox err.Description
  End If
End Function
la quale viene richiamata nell'evento clic di vari pulsanti di comando
in questo modo:
Private Sub Comando_Click()
On Error GoTo Err_Comando_Click
  'Azioni varie'
Exit_Comando_Click:
  Exit Sub
Err_Comando_Click:
  fErrore <-------------------
  Resume Exit_Comando_Click:
End Sub
Funziona bene.
Vorrei solo sapere se possa in futuro generare errori inaspettati o se
possa essere ottimizzata in qualche modo.
Grazie.
Robb

robb ha scritto:

Secondo me ti conviene mettere la Routine in un Modulo e passare anche
il numero di Errore...!
Public Function fErrore(ErrNum as long, ErrDesc as String)
If (err = 3101) Then
    sMessaggio = "Scegli un cliente dall'elenco clienti."
     iStile = vbExclamation + vbOKOnly
     sTitolo = "Richiesta selezione cliente"
     MsgBox sMessaggio, iStile, sTitolo
   ElseIf (err = Err2501) Or (err = Err3021) Then
   Else
     MsgBox ErrDesc
   End If
End Function
quindi puoi togliere la dichiarazioni delle Costanti Errore nella
Funzione e per richiamarla
puoi fare cos':
.....
Err_Comando_Click:
   Call  fErrore(Err.Number, Err.Description)
   Resume Exit_Comando_Click:
.....
Ciao
@Alex

 @Alex
Ciao Alex,
ti ringrazio molto per il suggerimento che ho subito sfruttato.
Purtroppo, mi ero dimenticato che uno dei pulsanti ha un MsgBox diverso
dagli altri e quindi ho dovuto modificare la funzione in questo modo:
Public Function fErrore(ErrNum As Long, ErrDesc As String, _
                        Optional errChiudi As Boolean = False)
  Dim sMessaggio As String
  Dim sTitolo As String
  Dim iStile As Integer
  Dim retValore As Integer
  If (err = 3101) Then
    If errChiudi = False Then
      sMessaggio = "Scegli un cliente dall'elenco clienti."
      iStile = vbExclamation + vbOKOnly
      sTitolo = "Richiesta selezione cliente"
      MsgBox sMessaggio, iStile, sTitolo
    Else
      sMessaggio = "Nessun cliente selezionato." & vbCrLf & "" & vbCrLf
& _
      "Il preventivo corrente non verrà salvato. Chiudere comunque?"
      iStile = vbExclamation + vbYesNo
      sTitolo = "Chiusura finestra"
      retValore = MsgBox(sMessaggio, iStile, sTitolo)
      Select Case retValore
        Case vbYes
          DoCmd.Close
        Case vbNo
      End Select
    End If
  ElseIf (err = 2501) Or (err = 3021) Then
  Else
    MsgBox ErrDesc
  End If
End Function
Come sempre, non è che non funzioni, ma gradirei un tuo parere.
Ciao e grazie.

 [CUT]

Direi che può andare....!
Non complicarla troppo con accezioni altrimenti è tolto lo scopo di
centralizzare.
@Alex

 @Alex
No no, la funzione rimarrà così.
Grazie mille.
Ciao.
Robb