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

Alex1983

Разработчик
Сообщения
1,145
Реакции
243
Всем привет.
Не подскажите как закрасить столбец программно?
Например если введённая дата является воскресением, то этот столбец закрасить в синий цвет.
Дата вводится 01-31. Месяц указывается в отдельной строке. Ну а год текущий.
 
@regist, это будет работать только в MS Office v2007+ (если ТС принципиально).
@Alex1983, приложи пример файла вместе с ручной закраской.
 
Последнюю строку каким критерием определять? Фиксированное число / последняя заполненная ячейка столбца 1?
 
Держи:
VB.NET / VBA:
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, а ты как макрос запускаешь?
 

Вложения

  • Шаблоны ЕКС.xls
    27.5 KB · Просмотры: 2
Макрос - это же не программа. Чтобы он сработал, его нужно либо вручную запустить или повесить на какое-нибудь событие, например, на запуск каждый раз как только происходит изменение в какой-либо ячейке. Можно вывести кнопку на панель, и нею запускать, можно вывести кнопку на лист и т.п. Дело за тобой.

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

Вложения

  • Шаблоны ЕКС_AutoOpen.xls
    29.5 KB · Просмотры: 2
  • Шаблоны ЕКС_SheetChange.xls
    30.5 KB · Просмотры: 2
Спасибо. Разобрался. Работает хорошо.

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

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