2017-02-13 11 views
0

У меня есть основная форма с несколькими элементами управления вкладками с субформами в них. На первой вкладке или подчиненной у меня есть «флажок 1», которое должно быть:vba Флажок, если условие else в Subform, доступ

  • проверяется, если «текстовое поле 1» не является пустым
  • бесконтрольно, если «текстовое поле 1» пусто

Код непосредственно помещается в объект класса «subform 1», поэтому я подумал, что могу использовать Me.

Вот мой код, но я всегда получаю сообщение об ошибке :(

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 

Таким образом, я получаю

Ошибка выполнения «2448»: Вы не можете назначить значение для этого объекта.

на линии, которая пытается присвоить -1 к Me.checkbox_1.Value.

+0

Какое сообщение об ошибке вы получаете? Это может нам помочь. Кроме того, вы всегда можете напрямую ссылаться на собственную подформацию. –

+0

Непонятно, что вам нужно. Установите флажок, если текстовое поле не пустое и снимите флажок, когда текстовое поле пуст? –

+0

Прямо сейчас с «Я». путь: вы не можете присваивать значение этому объекту, он всегда отлаживается на «Me.checkbox_1.Value = -1». – Karen

ответ

0

Попробуйте это. Он работает для меня. Я переместил его в действие Ctltextbox_1_Change. Это вызовет функцию всякий раз, когда она будет изменена и будет ломаться, когда у вас тоже ничего не будет. Я также изменил ваши значения на True и False.

Пожалуйста, попробуйте это и дайте мне знать.

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 

Вы также можете решить эту проблему в одной строке, как указано ниже.

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

Это можно сделать на одной линии. Кроме того, значение null является важным. – Fionnuala

+0

«Использование« Я »может не работать, когда вы открываете несколько форм». Это неверно. – Fionnuala

+0

Есть еще более простой способ :) Кроме того, изменение может быть не лучшим выбором. – Fionnuala

0

Хорошо, простой ответ: вы не можете использовать выражение Len() = 0 для не числового поля! Так что мой рабочий код для подчиненной теперь:

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

End Sub

Спасибо всем за помощь! :)