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 будет активным и не сможет получить активный индекс, поэтому держите свой код внутри функции тайм-аута
поскольку у меня может быть более трех разных цветов одновременно ... я не нашел никакого хорошего способа справиться с этим с помощью цветов по умолчанию условного форматирования ... я сделал это таким образом. затем всякий раз, когда я спрашиваю цвет ячейки, я получаю правильный цвет!
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!
Чтобы получить цвет ячейки в диапазоне, вам необходимо указать отдельную ячейку внутри массива в виде диапазона («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 (сплошной цвет), и его можно установить на другое значение, если цвет не меняется.
.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!"
Согласно 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
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.
Не похоже, что цвет "Условного формата" доступен программно. Я бы посоветовал вместо этого написать небольшую функцию, которая вычисляет цвет ячейки, а затем просто установить макрос для запуска его в активной ячейке всякий раз, когда вы редактируете значение. Например (извините за псевдокод - я больше не эксперт по 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 уметь читать цвет из кода. имеет ли это смысл?