2017-02-13 1 views
0

J'ai un formulaire principal avec plusieurs contrôles de tabulation avec sous-formulaires dans les. Sur le premier onglet ou sous-formulaire que j'ai une « case 1 », qui doit être:vba Case à cocher si autre condition dans sous-formulaire, accès

  • vérifié si « zone de texte 1 » est pas vide
  • décoché si « zone de texte 1 » est vide

Le code est directement mis dans l'objet de classe de "sous-formulaire 1", c'est pourquoi j'ai pensé que je pourrais utiliser Me.

Voici mon code, mais je reçois toujours des messages d'erreur :(

Private Sub Ctltextbox_1_AfterUpdate() 
    If Len(Ctltextbox_1.Value) = 0 Then 
     Me.checkbox_1.Value = 0 
    Else 
     Me.checkbox_1.Value = -1 
    End If 
End Sub 

De cette façon, je reçois le

Erreur d'exécution « 2448 »: Vous ne pouvez pas affecter valeur à cet objet.

Sur la ligne qui tente d'assigner -1 à Me.checkbox_1.Value.

+0

Quel est le message d'erreur que vous obtenez? Cela peut nous aider. En outre, vous pouvez toujours référencer explicitement le sous-formulaire lui-même. –

+0

On ne sait pas ce dont vous avez besoin. Cochez la case si la zone de texte n'est pas vide et décochez la case lorsque la zone de texte est vide? –

+0

Maintenant avec le "Moi". façon: Vous ne pouvez pas assigner de valeur à cet objet, il est toujours en train de déboguer sur "Me.checkbox_1.Value = -1" – Karen

Répondre

0

Essayez ceci. Ça marche pour moi. Je l'ai déplacé vers l'action Ctltextbox_1_Change. Cela appellera la fonction quand elle est changée et attrapera quand vous n'avez rien dans la boîte aussi. J'ai également changé vos valeurs en Vrai et Faux.

Veuillez essayer et faire le moi savoir.

Private Sub Ctltextbox_1_Change() 
    If Len(frmSub.Ctltextbox_1.Value) = 0 Then 
     frmSub.CheckBox_1.Value = False 
    Else 
     frmSub.CheckBox_1.Value = True 
    End If 
End Sub 

vous pouvez résoudre cela en une ligne comme mentionné ci-dessous.

Private Sub Ctltextbox_1_Change() 
    frmSub.CheckBox_1.Value = IIf((Len(frmSub.Ctltextbox_1.Value) = 0), False, True) 
End Sub 
+0

Cela peut être fait sur une ligne. De plus, null est important. – Fionnuala

+0

"L'utilisation de" Me "peut ne pas fonctionner lorsque vous avez plusieurs formulaires ouverts" Ceci n'est pas vrai. – Fionnuala

+0

Il y a un moyen encore plus simple :) Aussi, le changement n'est peut-être pas le meilleur pari. – Fionnuala

0

Ok, la réponse est simple: vous ne pouvez pas utiliser l'expression Len() = 0 pour un champ non numérique! Donc, mon code de travail pour le sous-formulaire est maintenant:

Private Sub Textbox1_AfterUpdate() 
If IsNull(Textbox1.Value) = False Then 
    Me.checkbox1.Value = True 
Else 
    Me.checkbox1.Value = False 
End If 

End Sub

Merci à tous pour votre aide! :)