имеется постоянно дополняемый столбец, в который периодически подписывается новая дата. так вот, требуется раскрасить ярлык листа красным цветом, если эта дата уже прошла и зеленым цветом - если эта дата совпадает с сегодняшней. все перерыл, не могу найти что-то похожее.
Круто. Только вот получается, что если последняя дата сегодняшняя - выделение зеленым, а все остальное - красным. Как теперь дополнить к этому условию, что если последняя дата еще не наступила - закрашивание скажем голубым? Или можно взглянуть на сам макрос?
Ярлык красным выделяется когда эта дата не только прошла, но и дата, которая еще не наступила. А хотелось бы разделить: Текущая дата - зеленым, прошедшая дата - красным, а дата, которая еще не наступила - синим
Юрий М, Скажите пожалуйста, а как сделать что бы макрос работал на всех листах, не прописывая его на каждый лист. Дата вставляется автоматически, используется макрос "Автоматической вставки текущей даты при вводе данных"
Скажите пожалуйста, а как сделать что бы при открытии книги макрос проверял есть ли текущая дата на листе и тогда уже менял цвет ярлыка. например я сегодня открыл книгу, и цвет ярлыка зелёный, а должен быть красный, так как дата стоит вчерашняя, а не сегодняшняя
Вот пример на 2х листах Таких листов будет много. То есть нужна проверка при открывании книги и если на всех листах старая дата то ярлыки на всех листах красные. А если есть лист с датой которая совпадает с сегодняшней то цвет ярлыка зелёный.
Private Sub Workbook_Open()
Dim Sht As Worksheet, LastRow As Long
For Each Sht In ThisWorkbook.Sheets
With Sht
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
If LastRow > 2 Then
If .Cells(LastRow, 2) = Date Then
.Tab.Color = vbGreen
Else
.Tab.Color = vbRed
End If
End If
End With
Next
End Sub
Какой смысл красить ярлык по Workbook_SheetChange? Все равно цвет ярлыка активного листа не видно.
Код
Private Sub Workbook_Open()
For Each Sh In Me.Worksheets
Call Tab_Color(Sh)
Next
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Call Tab_Color(Sh)
End Sub
Sub Tab_Color(ByVal Sh As Object)
Dim x As Date
x = Application.Max(Sh.Range("B:B"))
If x < Date Then
Sh.Tab.Color = vbRed
ElseIf x = Date Then
Sh.Tab.Color = vbGreen
Else
Sh.Tab.Color = vbBlue
End If
End Sub
Доброго времени суток. Извините, возможно я не правильно описал суть вопроса. Есть книга в которой 7 листов, несколько раз в день эта книга открывается и дописывается новая дата. Если при открытии книги на листе дата старая (например вчерашняя) то ярлык листа красный, а если дата соответствует сегодняшней то ярлык листа зелёный.
В этом примере сделано так как мне нужно, но тут есть 2 больших проблем: 1 Если в листе стоит сегодняшняя дата, а потом по ошибке написали прошедшую дату, то цвет ярлыка останется зелёным, а не изменится на красный. 2 Так как книга открывается несколько раз в день, а дата может меняться не на всех листах, то на тех листах которых стоит вчерашняя дата, цвет ярлыка зелёный.
Например если вчера был понедельник и мы поставили дату вчера, то во вторник при открытии этой книги цвет ярлыка у понедельника будет зелёным. Даты в книге ставятся в зависимости от дня недели Если сегодня понедельник то дата ставится в листе с именем понедельник