Определите, установлен ли флажок Доступ или нет - PullRequest
19 голосов
/ 28 сентября 2010

Такой простой вопрос, но я не могу найти ответ (Google, MS help, SO):

Как я могу проверить с помощью VBA, установлен ли несвязанный флажок в форме доступа пользователем или нет? Не могу найти подходящую недвижимость.

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

UPDATE:

Я использовал этот код после предложений @HansUp и @RC:

Private Sub CmdTest_Click()
    MsgBox "Check1.Value = " & Me.Check1.Value
    MsgBox "Check2.Value = " & Me.Check2.Value
End Sub

Private Sub Form_Load()
    Me.Check1.Value = 25
    Me.Check2.Value = 50
End Sub

2-е ОБНОВЛЕНИЕ:

Код должен быть таким (спасибо @ David-W-Fenton):

Private Sub CmdTest_Click()
    If Me.Check1 = True Then
        MsgBox "Check1 IS CHECKED"
    Else
        MsgBox "Check1 IS NOT CHECKED"
    End If
    If Me.Check2 = True Then
        MsgBox "Check2 IS CHECKED"
    Else
        MsgBox "Check2 IS NOT CHECKED"
    End If    
End Sub

Private Sub Form_Load()
    ' set first checkbox default checked
    Me.Check1.Value = True 
    ' set second checkbox default unchecked
    Me.Check2.Value = False
End Sub

Ответы [ 2 ]

20 голосов
/ 29 сентября 2010

Флажки - это тип элемента управления, предназначенный для одной цели: для обеспечения правильного ввода логических значений.

В Access существует два типа:

  1. 2-состояния- может быть проверен или не отмечен, но не Null.Значения: True (проверено) или False (не проверено).В Access и VBA значение True равно -1, а значение False равно 0. Для переносимости в средах, в которых для True используется 1, вы всегда можете проверить значение False или Not False, поскольку False - это значение 0 для всех сред I.знать о.

  2. 3 состояния - как 2 состояния, но может быть нулевым.Нажатие на него циклически перебирает True / False / Null.Это для привязки к целочисленному полю, которое допускает Null.Бесполезно с булевым полем, так как оно никогда не может быть нулевым.

Незначительный спор с ответами:

Почти никогда не нужно использоватьСвойство .Value элемента управления доступом, так как это свойство по умолчанию.Эти два значения эквивалентны:

  ?Me!MyCheckBox.Value
  ?Me!MyCheckBox

Единственный недостаток здесь заключается в том, что важно соблюдать осторожность, чтобы не создавать неявные ссылки при проверке значения флажка.Вместо этого:

  If Me!MyCheckBox Then

... напишите один из следующих параметров:

  If (Me!MyCheckBox) Then  ' forces evaluation of the control

  If Me!MyCheckBox = True Then

  If (Me!MyCheckBox = True) Then

  If (Me!MyCheckBox = Not False) Then

Аналогично, при написании подпрограмм или функций, которые получают значения из логического элемента управления, всегда объявляйте свой логический типпараметры как ByVal, если вы на самом деле не хотите манипулировать элементом управления.В этом случае тип данных вашего параметра должен быть элементом управления доступом, а не логическим значением.Все остальное рискует неявными ссылками.

И наконец, если вы установите значение флажка в коде, вы можете фактически установить его на любое число, не только 0 и -1, но и любое другое число.0 считается истиной (потому что это не ложь).Хотя вы можете использовать такие вещи в HTML-форме, это неправильный дизайн пользовательского интерфейса для приложения Access, поскольку у пользователя нет возможности увидеть, какое значение фактически хранится в элементе управления, что противоречит целивыбрав его для редактирования ваших данных.

4 голосов
/ 28 сентября 2010

Проверка на yourCheckBox.Value?

...