Условное форматирование Excel 2007 - как получить цвет ячейки?

var totalItemsPop = $('#Mycarousel .item').length; 
$('#Mycarousel').on('slide.bs.carousel', function() {
       setTimeout(function(){ 
            currentIndexPop = $('#Mycarousel div.active').index() + 1;
            $('.num').html('' + currentIndexPop + '/' + totalItemsPop + '');
         }, 1000);
   });

после того, как событие слайда div будет активным и не сможет получить активный индекс, поэтому держите свой код внутри функции тайм-аута

12
задан Community 9 July 2018 в 09:34
поделиться

6 ответов

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

 for (int t = 0; t < d_distinct.Length; t++ )
 {                        
   Excel.FormatCondition cond =
    (Excel.FormatCondition)range.FormatConditions.Add(
    Excel.XlFormatConditionType.xlCellValue,
    Excel.XlFormatConditionOperator.xlEqual, 
    "="+d_distinct[t],
    mis, mis, mis, mis, mis);
   cond.Interior.PatternColorIndex = 
    Excel.Constants.xlAutomatic;
  cond.Interior.TintAndShade = 0;
  cond.Interior.Color = ColorTranslator.ToWin32(c[t]);
  cond.StopIfTrue = false;                        
}

d_distinct содержит все различные значения в диапазоне ... c - это Color [], который содержит разные цвета для каждого отдельного значения! этот код можно легко перевести на vb!

0
ответ дан 26 October 2019 в 10:46
поделиться

Чтобы получить цвет ячейки в диапазоне, вам необходимо указать отдельную ячейку внутри массива в виде диапазона («A1», «C3»). Cells (1, 1) (для ячейки A1). Справка Excel довольно удобна, если вы посмотрите имя свойства, с которым у вас возникли проблемы.

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

Green = Range("A1","C3").Cells(1,1).Interior.Color
Yellow = Range("A1","C3").Cells(1,3).Interior.Color
Red = Range("A1","C3").Cells(2,1).Interior.Color

А затем переключить цвета на все красные:

Range("A1","C3").Interior.Color = Red

Снова проверьте справку Excel, чтобы узнать, как использовать ячейки ([RowIndex], [ColumnIndex]).

Если это не так. не работает для вас, проверьте, чему равен .Interior.PatternColorIndex. Обычно я оставляю его на xlAutomatic (сплошной цвет), и его можно установить на другое значение, если цвет не меняется.

0
ответ дан 26 October 2019 в 10:46
поделиться

.Interior.Color возвращает "настоящий" цвет, а не результат условно-отформатированного цвета.

@sss: Он недоступен через API.

Лучшее, что вы можете сделать состоит в том, чтобы проверить те же условия, которые вы использовали в условном форматировании.

Чтобы избежать дублирования кода, я предлагаю перенести условные критерии в UDF. Примеры:

Function IsGroup1(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue < 0)
End Function

Function IsGroup2(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue = 0)
End Function

Function IsGroup3(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue > 0)
End Function

Затем используйте эти формулы в своем условном форматировании:

=IsGroup1(A1)
=IsGroup2(A1)
=IsGroup3(A1)

Тогда ваш код вместо того, чтобы смотреть на цвет ячеек, проверяет, выполняется ли условие:

If IsGroup1(Range("$A$1").Value) Then MsgBox "I'm red!"
10
ответ дан 26 October 2019 в 10:46
поделиться

Согласно XlColorIndex Enumeration ColorIndex = -4142 означает Нет цвета

Я не знаю, почему это происходит. Возвращаемое значение похоже на десятичное представление значения RGB. Улучшенная версия этого скрипта для расшифровки значения в шестнадцатеричной нотации RGB

Function RGB(CellRef As Variant)
   RGB = ToHex(Range(CellRef).Interior.Color)
End Function

Function ToHex(ByVal N As Long) As String
   strH = ""
   For i = 1 To 6
      d = N Mod 16
      strH = Chr(48 + (d Mod 9) + 16 * (d \ 9)) & strH
      N = N \ 16
   Next i
   strH2 = ""
   strH2 = Right$(strH, 2) & Mid$(strH, 3, 2) & Left$(strH, 2)
   ToHex = strH2
End Function
0
ответ дан 26 October 2019 в 10:46
поделиться

As a follow up to @richardtallent (sorry, I couldn't do comments), the following link will get you a function that returns you the color index by evaluating the conditional formatting for you.

http://www.bettersolutions.com/excel/EPX299/LI041931911.htm

3
ответ дан 26 October 2019 в 10:46
поделиться

Не похоже, что цвет "Условного формата" доступен программно. Я бы посоветовал вместо этого написать небольшую функцию, которая вычисляет цвет ячейки, а затем просто установить макрос для запуска его в активной ячейке всякий раз, когда вы редактируете значение. Например (извините за псевдокод - я больше не эксперт по VBA):

Function GetColorForThisCell(Optional WhatCell as String) as Int

   If WhatCell="" Then WhatCell = ActiveCell

   If Range(WhatCell).value = -1 then GetColorForThisCell = vbGreen
   If Range(WhatCell).value =  0 then GetColorForThisCell = vbYellow
   If Range(WhatCell).value =  1 then GetColorForThisCell = vbRed
End Function

Sub JustEditedCell
   ActiveCell.color = GetColorForThisCell()
End Sub

Sub GetColorOfACell(WhatCell as string)
   Msgbox(GetColorForThisCell(WhatCell) )
End Sub

Хотя вы не сможете использовать встроенное условное форматирование Excel, это приведет к тому же результату, и вы ' d уметь читать цвет из кода. имеет ли это смысл?

0
ответ дан 26 October 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: