Как сделать содержимое ячейки "невидимым" с помощью NumberFormat ;;;
Чтобы скрыть содержимое ячейки, я предлагаю не менять цвета.
Вместо этого сохраняйте оригинал Range.NumberFormat
и установите его на Range.NumberFormat = ";;;"
, который скрывает положительные значения, отрицательные значения, нулевые значения и текст, т. е. скрывает все, кроме ошибок.
Normal Color и ColorIndex
Вы всегда можете прочитать или написать стандартный цвет ячейки, например
Font.Color
Interior.Color
Значение цвета - 3цвет RGB байта, может быть установлен RGB(red byte, green byte, blue byte)
и храниться в переменных Long
(4 байта, представляющих байты цвета 0BGR).
ColorIndex
- это значение только от 1 до 56 - сразличные результаты, в зависимости от цветовой палитры рабочей книги.
Отображаемый цвет с помощью DisplayFormat
Отображаемый цвет можно изменить с помощью условного форматирования или стиля таблицы.Он не меняет стандартный цвет, но накладывает его или виден вместо основного стандартного цвета.
Вы можете читать только наложенный цвет, но вы можете не устанавливать его напрямую для каждой ячейки:
DisplayFormat.Font.Color
DisplayFormat.Interior.Color
Если вы измените базовый .Font.Color
, видимый результат зависит отшаблон наложения DisplayFormat.
DisplayFormat с помощью условного форматирования (FormatConditions)
Если вы хотите изменить цвет условного форматирования DisplayFormat
, вы не можете установитьэто непосредственно в самом диапазоне ячейки, но в пределах условного (ых) форматирования (ов) для этого диапазона.Поэкспериментируйте с этим:
Private Sub DisplayColorByFormatCondition()
Dim i As Long
With ActiveSheet.Range("A1")
Debug.Print "Color Info for " & .Cells.Address
Debug.Print "Standard Font Color " & .Font.Color & _
" is displayed as " & .DisplayFormat.Font.Color; ""
Debug.Print "Standard Interior Color " & .Interior.Color & _
" is displayed as " & .DisplayFormat.Interior.Color
If .FormatConditions.Count = 0 Then
Debug.Print "This cell is not part of a FormatCondition."
Else
For i = 1 To .FormatConditions.Count
With .FormatConditions(i)
Debug.Print "Condition " & i & " sets Font Color to " & .Font.Color & _
"and Interior Color to " & .Interior.Color
End With
Next i
End If
End With
End Sub
DisplayFormat по стилю таблицы (ListObject.TableStyle)
Если цвет DisplayFormat
является результатом стиля таблицы, поэкспериментируйте с этим:
Private Sub DisplayColorByTableStyle()
Dim lo As ListObject
Dim i As Long
With ActiveSheet.Range("A1")
Debug.Print "Color Info for " & .Cells.Address
Debug.Print "Standard Font Color " & .Font.Color & _
" is displayed as " & .DisplayFormat.Font.Color; ""
Debug.Print "Standard Interior Color " & .Interior.Color & _
" is displayed as " & .DisplayFormat.Interior.Color
For Each lo In ActiveSheet.ListObjects
If Not Intersect(lo.Range, .Cells) Is Nothing Then
Debug.Print "Cell is part of ListObject '" & lo.Name & _
"' which uses TableStyle '" & lo.TableStyle & "'"
If Not Intersect(lo.HeaderRowRange, .Cells) Is Nothing Then
Debug.Print "Cell is part of HeaderRowRange. Font color is set to " & _
lo.HeaderRowRange.DisplayFormat.Font.Color & _
", Interior color is set to " & _
lo.HeaderRowRange.DisplayFormat.Interior.Color
ElseIf Not Intersect(lo.DataBodyRange, .Cells) Is Nothing Then
Debug.Print "Cell is part of DataBodyRange. Font color is set to " & _
lo.DataBodyRange.DisplayFormat.Font.Color & _
", Interior color is set to " & _
lo.DataBodyRange.DisplayFormat.Interior.Color
For i = 1 To lo.ListRows.Count
If Not Intersect(lo.ListRows(i).Range, .Cells) Is Nothing Then
Debug.Print "Cell is part of ListRows(" & i & "). " & _
"Font color is set to " & _
lo.ListRows(i).Range.DisplayFormat.Font.Color & _
", Interior color is set to " & _
lo.ListRows(i).Range.DisplayFormat.Interior.Color
End If
Next i
End If
End If
Next lo
End With
End Sub