Создать макрос (процедуру-подпрограмму), обеспечивающий следующие действия:
- отмену ранее существующей заливки ячеек таблицы;
- заливку синим цветом ячеек таблицы, в которых отработка меньше произвольно заданной величины (вводится с клавиатуры через диалоговое окно во время выполнения макроса).
Создадим макрос (см. ссылку внизу), пишем текст:
Затем просим пользователя ввести величину отработки. Делаем это с помощью функции InputBox(Prompt, Title, default, другие необязательные параметры). Prompt – строка, которая выводится в окне InputBox и предлагает пользователю что-нибудь уже написать. Title – это заголовок окна ввода. А для того, чтобы пользователь не слишком тормозил, что ему тут вообще показывают и что делать дальше, установим значение по умолчанию – 5 часов (это произвольно, можно и другое установить).
Поскольку InputBox возвращает значение типа String, а нам надо число, то используем функцию конвертирования значения в тип Integer – CInt.
Вот такое окно получается в итоге
Обратите внимание, в этом случае я не делаю проверку вводимого значения. По идее, это вообще-то надо бы сделать. Пользователи бывают всякие, возьмет и введет словом «пять», получится ошибка:
Поэтому, если есть желание, сделайте условие на проверку. Например, есть в VBA функция IsNumeric(число), она возвращает истину, если значение «число» является числом. Если ложь, программа должна выдавать сообщение и прекращать работу. А если совсем продумать все, то не прекращать работу и запрашивать пользователя снова и снова, пока он не введет верное значение.
А еще лучше – проверить, что нажато – OK или Cancel. Если ОК – то проверить на числовое значение и работать дальше. Если Cancel – то выйти из функции и не заставлять пользователя грызть клавиатуру, вводя ненужные ему числа.
В текущем варианте, если пользователь нажмет Отмену (Cancel), то также получит ошибку несовпадения типов.
Вот сколько вариантов усовершенствования простой программы я вам тут привел, действуйте.
Осталось только в цикле проверить все ячейки с данными, и если значение текущей ячейки меньше введенного пользователем, то нужно закрасить ее в синий цвет.
Общий список всех сообщений по этой работе
- отмену ранее существующей заливки ячеек таблицы;
- заливку синим цветом ячеек таблицы, в которых отработка меньше произвольно заданной величины (вводится с клавиатуры через диалоговое окно во время выполнения макроса).
Создадим макрос (см. ссылку внизу), пишем текст:
Sub Заливка_ячеек()Сначала определим диапазон ячеек, в которых содержатся данные (пользовательский диапазон), затем очистим в этом диапазоне ячейки с данными дневной отработки.
Dim rng As Range
Dim c As Integer
Dim r As Integer
Dim otrabotka As Integer
'установка пользовательского диапазона
'для определения количества занятых строк
Set rng = ActiveSheet.UsedRange
'отмена предыдущей заливки
Range(rng.Cells(3, 4), rng.Cells(rng.Rows.Count, 10)).Interior.Pattern = xlNone
'запрос величины отработки у пользователя
otrabotka = CInt(InputBox("Введите величину отработки", "Ввод данных", 5))
'если текущее значение меньше введенного, то
'производится заливка синим цветом
For r = 3 To rng.Rows.Count
For c = 4 To 10
If Cells(r, c) < otrabotka Then Cells(r, c).Interior.Color = RGB(0, 0, 255)
Next c
Next r
Set rng = Nothing 'Освобождение памяти
End Sub
Затем просим пользователя ввести величину отработки. Делаем это с помощью функции InputBox(Prompt, Title, default, другие необязательные параметры). Prompt – строка, которая выводится в окне InputBox и предлагает пользователю что-нибудь уже написать. Title – это заголовок окна ввода. А для того, чтобы пользователь не слишком тормозил, что ему тут вообще показывают и что делать дальше, установим значение по умолчанию – 5 часов (это произвольно, можно и другое установить).
Поскольку InputBox возвращает значение типа String, а нам надо число, то используем функцию конвертирования значения в тип Integer – CInt.
Вот такое окно получается в итоге
Обратите внимание, в этом случае я не делаю проверку вводимого значения. По идее, это вообще-то надо бы сделать. Пользователи бывают всякие, возьмет и введет словом «пять», получится ошибка:
Поэтому, если есть желание, сделайте условие на проверку. Например, есть в VBA функция IsNumeric(число), она возвращает истину, если значение «число» является числом. Если ложь, программа должна выдавать сообщение и прекращать работу. А если совсем продумать все, то не прекращать работу и запрашивать пользователя снова и снова, пока он не введет верное значение.
А еще лучше – проверить, что нажато – OK или Cancel. Если ОК – то проверить на числовое значение и работать дальше. Если Cancel – то выйти из функции и не заставлять пользователя грызть клавиатуру, вводя ненужные ему числа.
В текущем варианте, если пользователь нажмет Отмену (Cancel), то также получит ошибку несовпадения типов.
Вот сколько вариантов усовершенствования простой программы я вам тут привел, действуйте.
Осталось только в цикле проверить все ячейки с данными, и если значение текущей ячейки меньше введенного пользователем, то нужно закрасить ее в синий цвет.
Дополнительные материалы к этому посту
Общее описание и подробности для всех вариантов, список вариантовОбщий список всех сообщений по этой работе
