2017-09-02 1 views
0

En accès, j'essaie de ne pas laisser l'utilisateur quitter une zone de texte sauf si elle l'a rempli (c'est-à-dire qu'elle ne l'a pas laissé vide). Cela doit être fait dans une fonction afin de réduire le code. Dans VBA existe-t-il un moyen d'empêcher l'utilisateur de quitter la fonction? (Je sais sur la mise au point mais j'ai besoin du code pour travailler à partir d'une multitude de différentes zones de texte)Comment faire référence à la zone de texte courante de l'utilisateur?

Pour référence mon code actuel est comme suit;

Function Reload() 

If IsNull(EmployeeID.Value) Or IsNull([First Name].Value) Or IsNull([Surname].Value) Or IsNull(DOB.Value) Or IsNull(Position.Value) Or IsNull(Position.Value) Or IsNull(Mobile.Value) Or IsNull(Email.Value) Or IsNull(Address.Value) Or IsNull(Suburb.Value) Or IsNull(Postcode.Value) Or IsNull([Start Date].Value) Or IsNull(UserLogin.Value) Or IsNull(UserPassword.Value) Then 
    MsgBox "Please fill out all fields" 
Else 
    DoCmd.RunCommand acCmdSaveRecord 
    Form.Refresh 
End If 

End Function 

Merci

+0

Laisser Reload prend un paramètre de l'objet de zone de texte, puis référence juste le nom du paramètre dans la vérification null? – Dave

+0

J'ai essayé mais ça ne semble pas fonctionner – Everton

+0

"ça ne marche pas" ne nous aide pas vraiment à déterminer ce qui ne fonctionne pas. Peux-tu être plus précis? – Dave

Répondre

0

La meilleure technique que je sais est d'utiliser l'événement BeforeUpdate pour exécuter la validation des données. En utilisant vos instructions if si les données ne sont pas valides, réglez

Cancel = True 

et les données n'écriront pas. Vous préférerez probablement désactiver la navigation par défaut des enregistrements et les boutons de fermeture de formulaire et utiliser des boutons personnalisés afin de pouvoir intercepter l'erreur de données non valide et empêcher le déplacement vers un nouvel enregistrement ou la fermeture du formulaire. Mais même si vous autorisez l'utilisateur à utiliser les boutons de navigation intégrés ou le bouton de fermeture, Access affichera des messages d'erreur sur l'impossibilité d'enregistrer l'enregistrement en cours et demandera à l'utilisateur s'il souhaite continuer.

Vous pouvez également aller plus loin et capturer quels champs ne sont pas valides et présenter un message.

Msgbox ("The following fields were left blank and must be entered to save this record:" & vbCrLf & "Field 1" & vbCrLf & "Field 2") 
+0

Sergey, je voudrais savoir comment vous avez fait les modifications de sorte que le code est apparu comment il a fait. Merci. – codenovice31415

+0

https://stackoverflow.com/editing-help @ codenovice31415 – Andre

0

Une petite modification du limiteur d'entrée de texte que j'utilise dans notre salle de chat devrait aider. Nouvelle fonction Je l'ai appelé MustINPUT et je l'appelle sur le LostFocus des zones de texte que vous ne voulez pas déplacer sans entrée.

Private Sub MyTextBox_LostFocus() 
    Call MustINPUT (Me.MyTextBox, 0) 
End Sub 

Il suffit de changer le message pour vos utilisateurs.

Sub MustINPUT(ctl As Control, iMaxLen As Integer) 

'Call MustINPUT(Me.txtSayThis, 0) 

    If Len(ctl.Text) = iMaxLen Then 
     MsgBox "Please Type something", vbExclamation, "Input Needed" 
     ctl.Text = Left(ctl.Text, iMaxLen) 
     ctl.SelStart = iMaxLen 
    End If 

End Sub 

Espérons cette aide. DR,