• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

Как закрасить столбец в Exel программно?

Alex1983

Разработчик
Сообщения
912
Симпатии
442
#1
Всем привет.
Не подскажите как закрасить столбец программно?
Например если введённая дата является воскресением, то этот столбец закрасить в синий цвет.
Дата вводится 01-31. Месяц указывается в отдельной строке. Ну а год текущий.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#3
@regist, это будет работать только в MS Office v2007+ (если ТС принципиально).
@Alex1983, приложи пример файла вместе с ручной закраской.
 

Alex1983

Разработчик
Сообщения
912
Симпатии
442
#4
Только я не много ошибся, число вводится 1,2,3 -9,10,11 и тд.
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#5
Последнюю строку каким критерием определять? Фиксированное число / последняя заполненная ячейка столбца 1?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#7
Держи:
VB.NET:
Option Explicit

Const iTableRowStart As Long = 3
Const iTableColumnStart As Long = 2
Const iColor = vbBlue

Public Sub main()
    Dim iTableRowEnd As Long
    Dim MonthNum As Long
    Dim MonthName As String
    Dim dDate As Date
    
    iTableRowEnd = Cells(Rows.Count, 1).End(xlUp).Row
    
    MonthName = [N1]
    MonthNum = Month(DateValue("01 " & MonthName & " 2018"))
    
    Dim i As Long
    For i = iTableColumnStart To iTableColumnStart + 30
        If IsNumeric(Cells(iTableRowStart, i)) Then
            dDate = DateSerial(Year(Now), MonthNum, Cells(iTableRowStart, i))
            If Weekday(dDate, vbMonday) = vbSunday Then
                Range(Cells(iTableRowStart, i), Cells(iTableRowEnd, i)).Interior.Color = iColor
            End If
        End If
    Next
End Sub
 

Alex1983

Разработчик
Сообщения
912
Симпатии
442
#10
Что то ни чего не происходит. Ни чего не красится.
Dragokas а вы не могли бы мне прислать рабочий вариант. Файл я выше давал.
 

Alex1983

Разработчик
Сообщения
912
Симпатии
442
#13

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#14
Макрос - это же не программа. Чтобы он сработал, его нужно либо вручную запустить или повесить на какое-нибудь событие, например, на запуск каждый раз как только происходит изменение в какой-либо ячейке. Можно вывести кнопку на панель, и нею запускать, можно вывести кнопку на лист и т.п. Дело за тобой.

Запустить вручную - ALT+F8, и дальше разберёшься.
Вот тебе вариант событием на изменение ячейки. Но он плох тем, что будет забирать у тебя процессорное время каждый раз как только ты меняешь любую ячейку, а тебе это незачем. Поэтому нужно думать, как тебе это оптимально провернуть. Можно например, сделать, чтобы макрос запускался 1 раз при каждом открытии книги. Вот тебе в Var.2 такой способ:
 

Вложения

Alex1983

Разработчик
Сообщения
912
Симпатии
442
#15
Спасибо. Разобрался. Работает хорошо.
Сообщения объединены:

Dragokas есть ошибка.
Не верно определяет воскресение. Вместо воскресения окрашивает понедельник.
Сообщения объединены:

Переправил на это
VB.NET:
If Weekday(dDate, vbSunday) = vbSunday Then
И стало вроде нормально определяться.
 
Последнее редактирование:
Сверху Снизу