Установка цвета шрифта в VBA

Я хочу установить цвет шрифта ячейки на определенное значение RGB.

Если я использую

ActiveCell.Color = RGB(255,255,0)

Я становлюсь желтым, но если я использую более экзотическое значение RGB, например:

ActiveCell.Color = RGB(178, 150, 109)

Я просто получаю серый цвет обратно.

Почему я не могу просто использовать любое значение RGB? И знаете ли вы какие-нибудь обходные пути?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
14 195
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Excel использует только цвета из цветовой палитры. Когда вы устанавливаете ячейку с использованием значения RGB, она выбирает ту из палитры, которая является наиболее подходящей. Вы можете обновить палитру своими цветами, а затем выбрать свой цвет, и это сработает.

Это позволит вам увидеть, что в настоящее время находится в палитре:

 Public Sub checkPalette()
      Dim i As Integer, iRed As Integer, iGreen As Integer, iBlue As Integer
      Dim lcolor As Long
      For i = 1 To 56
        lcolor = ActiveWorkbook.Colors(i)
        iRed = lcolor Mod &H100  'get red component
        lcolor = lcolor \ &H100  'divide
        iGreen = lcolor Mod &H100 'get green component
        lcolor = lcolor \ &H100  'divide
        iBlue = lcolor Mod &H100 'get blue component
        Debug.Print "Palette " & i & ": R = " & iRed & " B = " & iBlue & " G = " & iGreen
      Next i
    End Sub

Это позволит вам установить палитру

Public Sub setPalette(palIdx As Integer, r As Integer, g As Integer, b As Integer)
  ActiveWorkbook.Colors(palIdx) = RGB(r, g, b)
End Sub

Вы может обновляете палитру своими цветами, но обычно этого не следует делать. Одна из проблем заключается в том, что копирование и вставка в другую книгу с другой палитрой даст вам разные цвета. По этой причине обычно лучше придерживаться палитры по умолчанию.

Joe 18.12.2008 20:14

Спасибо за ответы и комментарии.

Это действительно доставило мне большие проблемы, потому что у моего клиента были установлены другие плагины в Excel, которые также изменяли цветовую палитру.

В итоге я заменил несколько цветов в палитре, а затем присвоил моим элементам определенный ColorIndex, но, черт возьми, это некрасиво.

Sub color()

bj = CStr(Hex(ActiveCell.Interior.Color))
If Len(bj) < 6 Then
    Do Until Len(bj) = 6
        bj = "0" & bj
    Loop
End If

R = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
G = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
B = CLng("&H" & bj)

End Sub

Подсказка: палитра Excel состоит из двух рядов цветов, которые используются редко и обычно могут быть установлены на пользовательские значения без видимых изменений в таблицах других людей.

Вот код для создания разумного набора «мягких» цветов, которые намного менее оскорбительны, чем значения по умолчанию:

Public Sub SetPalePalette(Optional wbk As Excel.Workbook) ' This subroutine creates a custom palette of pale tones which you can use for controls, headings and dialogues '

' ** THIS CODE IS IN THE PUBLIC DOMAIN ** ' Nigel Heffernan http://Excellerando.Blogspot.com

' The Excel color palette has two hidden rows which are rarely used: ' Row 1: colors 17 to 24 ' Row 2: colors 25 to 32 - USED BY SetGrayPalette in this workbook '

' Code to capture existing Screen Updating settting and, if necessary, ' temporarily suspend updating while this procedure generates irritating ' flickers onscreen... and restore screen updating on exit if required.

Dim bScreenUpdating As Boolean

bScreenUpdating = Application.ScreenUpdating

If bScreenUpdating = True Then Application.ScreenUpdating = False End If

'If Application.ScreenUpdating <> bScreenUpdating Then ' Application.ScreenUpdating = bScreenUpdating 'End If

If wbk Is Nothing Then Set wbk = ThisWorkbook End If

With wbk

.Colors(17) = &HFFFFD0  ' pale cyan
.Colors(18) = &HD8FFD8  ' pale green.
.Colors(19) = &HD0FFFF  ' pale yellow
.Colors(20) = &HC8E8FF  ' pale orange
.Colors(21) = &HDBDBFF  ' pale pink
.Colors(22) = &HFFE0FF  ' pale magenta
.Colors(23) = &HFFE8E8  ' lavender
.Colors(24) = &HFFF0F0  ' paler lavender

End With

If Application.ScreenUpdating <> bScreenUpdating Then Application.ScreenUpdating = bScreenUpdating End If

End Sub

Public Sub SetGreyPalette() ' This subroutine creates a custom palette of greyshades which you can use for controls, headings and dialogues

' ** THIS CODE IS IN THE PUBLIC DOMAIN ** ' Nigel Heffernan http://Excellerando.Blogspot.com

' The Excel color palette has two hidden rows which are rarely used: ' Row 1: colors 17 to 24 ' - USED BY SetPalePalette in this workbook ' Row 2: colors 25 to 32

' Code to capture existing Screen Updating settting and, if necessary, ' temporarily suspend updating while this procedure generates irritating ' flickers onscreen... remember to restore screen updating on exit!

Dim bScreenUpdating As Boolean

bScreenUpdating = Application.ScreenUpdating

If bScreenUpdating = True Then Application.ScreenUpdating = False End If

'If Application.ScreenUpdating <> bScreenUpdating Then ' Application.ScreenUpdating = bScreenUpdating 'End If

With ThisWorkbook .Colors(25) = &HF0F0F0 .Colors(26) = &HE8E8E8 .Colors(27) = &HE0E0E0 .Colors(28) = &HD8D8D8 .Colors(29) = &HD0D0D0 .Colors(30) = &HC8C8C8 ' &HC0C0C0 ' Skipped &HC0C0C0 - this is the regular 25% grey in the main palette .Colors(31) = &HB8B8B8 ' Note that the gaps are getting wider: the human eye is more sensitive .Colors(32) = &HA8A8A8 ' to changes in light greys, so this will be perceived as a linear scale End With

'The right-hand column of the Excel default palette specifies the following greys:

' Colors(56) = &H333333 ' Colors(16) = &H808080 ' Colors(48) = &H969696 ' Colors(15) = &HC0C0C0 ' the default '25% grey'

' This should be modified to improve the color 'gap' and make the colours easily-distinguishable:

With ThisWorkbook .Colors(56) = &H505050 .Colors(16) = &H707070 .Colors(48) = &H989898 ' .Colors(15) = &HC0C0C0 End With

If Application.ScreenUpdating <> bScreenUpdating Then Application.ScreenUpdating = bScreenUpdating End If

End Sub

Вы можете написать функцию CaptureColors и ReinstateColors для событий Open () и BeforeClose () каждой книги ... Или даже для каждого события активации и деактивации рабочего листа.

У меня где-то валяется код, который создает «тепловой» цветовой градиент для трехмерных диаграмм, давая вам переход от «холодного» синего к «горячему» красному за тридцать два шага. Это сложнее, чем вы думаете: градиент цветов, который будет восприниматься зрительной системой человека как `` равные интервалы '' (который работает по логарифмической шкале интенсивности и имеет нелинейные веса для красного, зеленого и синего как `` сильных '' цветов). ) требуется время для создания - и вам нужно использовать VBA, чтобы заставить MS Chart использовать указанные вами цвета в указанном вами порядке.

Нил, спасибо за качественный ответ на мой старый вопрос.

Peter Lindholm 22.08.2012 23:48

Другие вопросы по теме