Может ли кто-нибудь помочь мне с проверкой флажка в форме доступа?

#vba #ms-access

#vba #ms-access

Вопрос:

У меня проблемы с проверкой формы доступа, а точнее с флажком, поскольку Access сообщает мне, что объект не поддерживает это свойство или этот метод.

Мой код для выполнения проверки оценивает каждый элемент управления формы, и если его значение пустое или нулевое, он окрашивает его в оранжевый цвет фона, и если он исправлен, он возвращает его в белый.

Поскольку объект checkbox не разделяет свойство BackColor с текстовым полем или выпадающим списком, я попытался использовать borderColor, который является общим для всех трех.

Мой код:

 Private Sub ValidarCampos()
Dim FormActivo As Form
Dim control As control

Set FormActivo = Forms(0)

ValidaCampos = True
For Each control In FormActivo.Controls
    If (control.ControlType = 109 Or control.ControlType = 111 Or control.ControlType = 106) And control.Visible = True And control.Enabled = True Then 'Revisar el 106 (checkbox)
        If control.ControlType = 106 Then
            valor = control.TripleState
        Else
            valor = Trim(control.Value)
        End If
        Debug.Print valor
        'If (valor = "" Or IsNull(valor)) And control.Tag = "*" Then
        If (valor = "" Or IsNull(valor)) Then
            control.BorderColor = VBA.RGB(237, 125, 49)
            'MsgBox "No puede dejar nulo el campo " amp; control.Name, vbInformation, tiTulo
            If FormActivo.Controls(control.Name).Enabled = True Then
                FormActivo.Controls(control.Name).SetFocus
            End If
            ValidaCampos = False
            'Exit Function
            Exit Sub
        Else
            control.BackColor = VBA.vbWhite
        End If
    End If
Next
End Sub
  

Разъяснение:
Проблема возникает с «Включенным» свойством флажка
Когда он оценивает значение флажка, Access сообщает мне, что объект не поддерживает это свойство или метод.

Комментарии:

1. И в чем именно проблема? Что вы ожидали, при каких обстоятельствах и что на самом деле произошло?

2. В Else случае, если у вас все еще есть BackColor . См. Также Отладка кода VBA

3. @TomBrunberg Что мне нужно, так это знать, какое значение имеет флажок, вот почему я использую свойство «TripleState», которое возвращает строку, но я не могу заставить код работать.

4. Я обнаружил, что ошибка заключается в оценке с помощью «Если». Это работает плохо, поскольку при появлении ошибки в данный момент обрабатывается метка, чего не должно быть, потому что «Если» сформулировано следующим образом: «Если (элемент управления. ControlType = 109 Или control . ControlType = 111) И control.Visible = True и control . Включено = True Тогда»

5. Почему вы назначаете valor control.TripleState ? Я думаю, вы хотите установить для свойства TripleState значение TRUE.

Ответ №1:

У меня были проблемы с тем, что флажок доступа не работал должным образом дважды. Вы можете обойти флажок, превратив метку в синтетический флажок. Это также дает вам свойство back color. Я получил схему решения от Фреда здесь: http://www.justskins.com/forums/changing-check-box-colour-171415.html

поместите метку и флажок в форму. установите для свойства checkbox visible значение false. измените размер метки и установите для свойства label.border значение solid, чтобы метка выглядела как флажок. Установите шрифт метки на wingdings. тогда вот код.

 'in form codebehind
Private Sub labelthatlookslikeacheckbox_Click()
If Me.invisiblecheckbox.Value = -1 Then
Me.invisiblecheckbox.Value = 0
Me.labelthatlookslikeacheckbox.Caption = ""
Else
If IsNull(Me.invisiblecheckbox.Value) Then
Me.invisiblecheckbox.Value = -1
Me.labelthatlookslikeacheckbox.Caption = Chr(254)
Else
Me.invisiblecheckbox.Value = Null
Me.labelthatlookslikeacheckbox.Caption = Chr(110)
End If
End If
Me.Refresh 'update display
    End Sub

'in a module
Private Sub ValidarCampos()
Dim FormActivo As Form
Dim control As control
Set FormActivo = Forms(0)
ValidaCampos = True
For Each control In FormActivo.Controls
If (control.ControlType = acCheckBox) Then
    If (control.Name = "invisiblecheckbox") And IsNull(control.Value) Then
    FormActivo.Controls("labelthatlookslikeacheckbox").BackColor = VBA.RGB(237, 125, 49)
    Else
    FormActivo.Controls("labelthatlookslikeacheckbox").BackColor = vbWhite
    End If
    'HANDLE OTHER CHECKBOXES HERE
    'if going generic one solution is to use a checkbox and label naming convention then parse control.name
Else
    If (control.ControlType = acTextBox Or control.ControlType = acComboBox) Then
    'labels don't have an enabled control so we only test textboxes and comboboxes
    If control.Visible = True And control.Enabled = True Then
    valor = Trim(control.Value)
    Debug.Print valor
        If (valor = "" Or IsNull(valor)) Then
            control.BackColor = VBA.RGB(237, 125, 49)
            If FormActivo.Controls(control.Name).Enabled = True Then
                FormActivo.Controls(control.Name).SetFocus
            End If
            ValidaCampos = False
        Else
            control.BackColor = VBA.vbWhite
        End If
    End If
    End If
End If
Next 'control
End Sub

  

Верхний флажок — это метка:

введите описание изображения здесь

Без выделения текста :

введите описание изображения здесь