2017-07-11 5 views
0

Comme on utilise souvent un seul et même message (ie notes d'erreur) sur plusieurs formes d'accès MS, j'ai pensé à organiser tous les messages dans une table et les appeler avec un public fonction:Ms accès VBA - Sélection Case avec MsgBox de la fonction du module

Public Function message(msg_name As String, Optional msg_type As VbMsgBoxStyle) 

output = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & msg_name & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & msg_name & "'") 

Ordinaire et simple. Travaillant bien pour les notifications simples ("ouput =" et les parenthèses ne seraient pas nécessaires pour cela, bien sûr). Cependant, je ne peux pas utiliser ces messages dans un contexte de Select Case:

Select Case message("test_message_name", vbYesNo) 
    Case vbYes 
    MsgBox "Yes" 
    Case vbNo 
    MsgBox "No" 
End Select 

Ni en appuyant sur « Oui », ni « Non » sont reconnus en tant que tels. Je reçois seulement une réponse si je définis aussi "Case Else". Si je fais la même procédure dans l'un même sous, tout fonctionne très bien:

output = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & "test_message_name" & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & "test_message_name" & "'") 

Select Case output 
    Case vbYes 
    MsgBox "Yes" 
    Case vbNo 
    MsgBox "No" 
End Select 

Suis-je manque quelque chose?

+0

Oh, presque oublié, tu es aussi un peu contradictoire dans la dénomination: '' est en option ms_type' type Msg_type 'plus tard, et' output' n'est jamais déclaré. Essayez d'activer 'Option Explicit' pour repérer ces erreurs plus facilement (vous obtiendrez des erreurs de compilation pour les deux). –

+0

Ah, merci. Le "ms_type" était en fait une faute de frappe. Je n'ai pas copié-collé à partir d'Access mais j'ai encore écrit le code. –

Répondre

2

Vous venez d'oublier à la fois d'affecter le type de paramètre de retour de fonction et d'affecter output à la fonction.

Public Function message(msg_name As String, Optional ms_type As VbMsgBoxStyle) As MsgBoxResult

Et

message = output

ou tout simplement

message = MsgBox DLookup("Msg_Text", "vba_msg", "Msg_Name='" & msg_name & "'"), _ 
      msg_type, _ 
      DLookup("Msg_Caption", "vba_msg", "Msg_Name='" & msg_name & "'")