Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Изменение цвета поля при вводе данных / 19 сообщений из 19, страница 1 из 1
27.11.2017, 17:12
    #39560116
Изменение цвета поля при вводе данных
Здравствуйте! Ни как не могу разобраться, что я делаю не так. Мне нужна визуальная проверка вводимых значений. Когда оператор вводит данные, данные обрабатываются и, в зависимости от результата цвет ячейки меняется.
Для примера сделал форму и написал такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub p2_AfterUpdate()
    qBC

End Sub

Private Sub qBC()
On Error Resume Next
    Dim q As String
        q = ""
        q = Nz(Val(Me!p2) - Val(Me!p0), No)
        
        Select Case q
            Case No
            Me!p2.BackColor = vbWhite
            Case Is > 0 <= 150
            Me!p2.BackColor = vbGreen
            Case Is < 0
            Me!p2.BackColor = vbRed
            Case Is > 150
            Me!p2.BackColor = vbYellow
        End Select
Debug.Print q
End Sub



Но код не работает так, как я планировал. Можно сказать, он вообще не работает.
Сразу в довесок вопрос, можно ли сделать так, чтобы цвет поля менялся при вводе значения в поле, а не после обновления поля, как у меня сейчас. Пробовал писать такой же код в событие change, но это вызывало ошибку.
...
Рейтинг: 0 / 0
27.11.2017, 18:56
    #39560160
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зимин,
проверку выполняют не на After а на BeforeUpdate (до обновления поля)
Код: vbnet
1.
2.
3.
4.
5.
Private Sub p2_BeforeUpdate(Cancel As Integer)
If Not условие Then ' операторы =,<,<,<>, and,or
    сообщение
    Cancel = True 'курсор не выйдет из поля пока не будут введены корректные данные
End If


End Sub
...
Рейтинг: 0 / 0
28.11.2017, 06:14
    #39560275
Изменение цвета поля при вводе данных
sdku,

Спасибо за ответ. Мне нужно, чтобы проверка была не жёсткой, но чтобы оператор видел, если есть какие-то отклонения и сам принимал решение, вносить или не вносить данные. Поэтому проблема не решена. Прикрепляю пример формы, в которой подобная логика так же не работает.
...
Рейтинг: 0 / 0
28.11.2017, 08:55
    #39560308
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зиминsdku,

Спасибо за ответ. Мне нужно, чтобы проверка была не жёсткой, но чтобы оператор видел, если есть какие-то отклонения и сам принимал решение, вносить или не вносить данные. Поэтому проблема не решена. Прикрепляю пример формы, в которой подобная логика так же не работает.

1. Изменение цвета поля - меняет цвет всего столбца.
2. Нафига эта радуга нужна? Чать не ЛГБТ.
3. Внятный текст предупреждения в поле рядом - гораздо полезнее.
...
Рейтинг: 0 / 0
28.11.2017, 09:52
    #39560341
Изменение цвета поля при вводе данных
aleks222,

1) Есть какой-то другой способ определить цвет объекта?
2) ...
3) Я вроде ситуацию описал и вопрос по ней, а не спрашивал чужого мнения как лучше просигнализировать.
...
Рейтинг: 0 / 0
28.11.2017, 10:02
    #39560349
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Условное форматирование.
...
Рейтинг: 0 / 0
28.11.2017, 10:33
    #39560372
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зимин,
...
Рейтинг: 0 / 0
28.11.2017, 10:42
    #39560378
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зимин, у Вас код некорректный - строковую переменную пытаетесь сравнивать с числами.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub p2_AfterUpdate()
    qBC

End Sub

Private Sub qBC()
On Error Resume Next
    Dim q As Integer
        q = 0
        q = Nz(Val(Me!p2) - Val(Me!p0), 0)
        
        Select Case q
            Case 0
            Me!p2.BackColor = vbWhite
            Case Is > 0 <= 150
            Me!p2.BackColor = vbGreen
            Case Is < 0
            Me!p2.BackColor = vbRed
            Case Is > 150
            Me!p2.BackColor = vbYellow
        End Select
Debug.Print q
End Sub
...
Рейтинг: 0 / 0
28.11.2017, 10:46
    #39560381
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зимин,
__MichelleУсловное форматирование.
...
Рейтинг: 0 / 0
29.11.2017, 08:04
    #39561009
Изменение цвета поля при вводе данных
Панург,

+100500 Вам в карму! )))
Очень помогли.
Но))) стал играться, добавил вывод вычисления в Immidiate window, чтобы видеть, результат и опять тот же глюк:
Если Case задан интервалом (>0 <100, например), то обработка идёт только по условию >0. То есть, если я прошу выделить ячейку зелёным, а вычисление 100 или больше, ячейка всё равно зелёная.
Плюс перестал обрабатываться Null.
Не понимаю - это глюк или я "мистер дерево"?

Обработка в реальном времени - ещё раз спасибо!
...
Рейтинг: 0 / 0
29.11.2017, 13:54
    #39561258
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий Зимин,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub p2_Change()
If Not IsNull(Me.p0) Then
    Select Case Me.p2.Text - Me.p0
        Case Is < 0
            Me.p2.BackColor = vbRed
        Case 0 To 100
            Me.p2.BackColor = vbGreen
        Case 100.001 To 200
            Me.p2.BackColor = vbYellow
        End Select
Else
    Me.p2.BackColor = vbWhite
End If
End Sub
...
Рейтинг: 0 / 0
14.12.2017, 09:19
    #39569406
Изменение цвета поля при вводе данных
Всем спасибо за помощь. С заданием интервалов с помощью < или > (например: >= 0 < 30) так и не разобрался (access воспринимает только первую часть условия (>=0). Плюс, для корректной работы требуется указать тип переменной (Long, Integer и т.п.).
...
Рейтинг: 0 / 0
14.12.2017, 09:29
    #39569412
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
sdku
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Select Case Me.p2.Text - Me.p0
        Case Is < 0
            Me.p2.BackColor = vbRed
        Case 0 To 100
            Me.p2.BackColor = vbGreen
        Case 100.001 To 200
            Me.p2.BackColor = vbYellow
        End Select


Вообще-то для этого существует Case Else. А то введёт юзер 10,0005 - и всё насмарку.
...
Рейтинг: 0 / 0
14.12.2017, 09:30
    #39569414
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Валерий ЗиминС заданием интервалов с помощью < или > (например: >= 0 < 30) так и не разобрался (access воспринимает только первую часть условия (>=0)
Код: vbnet
1.
Case Is >= 0 AND Is < 30
...
Рейтинг: 0 / 0
14.12.2017, 10:59
    #39569497
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Akina
Код: vbnet
1.
Case Is >= 0 AND Is < 30


Нет, такие конструкции VBA не воспринимает, увы
...
Рейтинг: 0 / 0
14.12.2017, 12:37
    #39569558
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
Вместо Cfse можно попробовать использовать и структуру If ... ElseIf ... Но там свои тонкости. Идёт последовательная проверка всех условий.
...
Рейтинг: 0 / 0
14.12.2017, 13:37
    #39569597
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
MrShinтакие конструкции VBA не воспринимает, увы
Да, сорри, в VBA условия объединяются запятой, которая интерпретируется как OR.
Есть смысл воспользоваться тем, что проверка условий выполняется последовательно, и одно из ограничений проверить альтернативным условием выше по тексту. Т.е. типа

Код: vbnet
1.
2.
3.
4.
Case Is < 0 ' первое проверяется непосредственно
Case Is < 30 ' с учётом первого эквивалентно Is >= 0 AND Is < 30
Case Is < 100 ' с учётом предыдущих эквивалентно Is >= 30 AND Is < 100
Case Else ' с учётом предыдущих эквивалентно Is >= 100


Jossтам свои тонкости. Идёт последовательная проверка всех условий.Так же, как и в случае Case. Различие лишь в том, что ElseIf позволяет выполнять проверку разных выражений, типа

Код: vbnet
1.
2.
3.
If x < 0 Then ' первое проверяется непосредственно
ElseIf y < 0 Then ' с учётом первого эквивалентно x >= 0 AND y < 0
Else ' с учётом предыдущих эквивалентно x >= 0 AND y >= 0
...
Рейтинг: 0 / 0
14.12.2017, 16:26
    #39569745
а так?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
AkinaДа, сорри, в VBA условия объединяются запятой, которая интерпретируется как OR.


можно использовать case true
...
Рейтинг: 0 / 0
28.12.2017, 12:39
    #39577366
Финист
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета поля при вводе данных
А задать несколько правил форматирования для одного поля. В зависимости от последовательности правил можно настроить и окрашивание поля в зависимости от значения.
Ну в excel так работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Изменение цвета поля при вводе данных / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]