#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
. См. Также Отладка кода VBA3. @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
Верхний флажок — это метка:
Без выделения текста :