Отображение / скрытие полей в форме в результате выпадающего меню - PullRequest
0 голосов
/ 27 января 2020

Я создаю форму, которая принимает данные для запроса по трем отдельным таблицам доступа.

У меня проблема в том, что моя предыдущая версия for имела слишком много полей и, таким образом, вводила в заблуждение конечного пользователя. У меня есть выпадающее меню с четырьмя различными параметрами. Это единственные четыре, которые могут быть выбраны (чтобы предотвратить случайный ввод данных), и в зависимости от того, какие из них выбраны, я хочу, чтобы некоторые поля отображались, а другие - нет, поскольку они не имеют отношения к этому. Я также хочу, чтобы это работало, когда пользователь просматривает записи формы (то есть: поля показывают / скрывают в зависимости от значения в раскрывающемся меню).

Я пытался использовать следующий код (я новичок в VBA):

Private Sub Status_Change()
    If Status.Value = "Blue" Then
        Me.Field_1.Visible = False
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = False
        Me.Field_7.Visible = False
    Else
    If Status.Value = "Green" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = True
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Red" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = True
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Yellow" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = True
        Me.Field_3.Visible = True
        Me.Field_4.Visible = True
        Me.Field_5.Visible = True
        Me.Field_6.Visible = False
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Orange" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = False
        Me.Field_7.Visible = True
    End If
End Sub

Пока что это не сработало, и я не совсем уверен в том, что я делаю неправильно. Кто-нибудь может мне помочь?

Заранее спасибо.

Редактировать: поля остаются видимыми, независимо от того, что показывает значение «Состояние» при просмотре записей или вводе новой записи. Ошибок не дано.

1 Ответ

1 голос
/ 27 января 2020

Я бы предложил использовать событие AfterUpdate вместо события OnChange.

Предполагая, что Status является комбинированным списком, вы можете проверить, что связанный столбец комбинированного списка содержит значения, для которых вы проверяете.

Обратите внимание, что ваш код может быть уменьшено до следующего:

Private Sub Status_AfterUpdate()
    Me.Field_1.Visible = Status <> "Blue"
    Me.Field_2.Visible = Status = "Yellow"
    Me.Field_3.Visible = Status = "Yellow"
    Me.Field_4.Visible = Status = "Yellow"
    Me.Field_5.Visible = Status = "Yellow"
    Me.Field_6.Visible = Status = "Green" or Status = "Red"
    Me.Field_7.Visible = Status <> "Blue"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...