Подсказки к возможной причине в конце этого начального обсуждения .....
Простая строка кода макроса VBA, например:
FontCol = Cells(K, AmntCol).Font.ColorIndex
сообщает, с курсором, наведенным на " FontCol », значение« 1 », которое является значением индекса для черного.
пока это значение« опубликовано »в соответствующей (активной) электронной таблице Excel с помощью:
Cells(RowRef, ColRef) = FontCol
ячейка , адресованная, как указано выше, показывает -5 вместо 1 (как один из примеров проблемы)
«1» - это то, что вы ожидаете увидеть для черного, и я даже не могу понять, что «-5» не говоря уже о том, почему это также не то, что, по-видимому, используется в коде VBA. - и если я напишу "-5" в некоторый код logi c, из него не будет никакого полезного результата, что подтверждает, что реальное базовое значение равно 1, а не -5.
Кажется, что никакая сумма форматирования (посадочной) ячейки или изменение «Dimension as statement» для FontCol на «integer», «string» или «option» изменяет то, что публикуется в ячейке.
Мне не удалось найти какую-либо информацию по этой проблеме. Самым близким было что-то о длинных числах, обертывающих более короткие числа в индексном пространстве, и остаточные движущие силы ... что бы это ни значило.
Я действительно хотел бы решить эту проблему, поскольку я намеревался использовать значения ColorIndex как способ безопасного редактирования значений ячеек.
Любая мудрость будет принята с благодарностью.
Дополнение к выше - в ответ.
Изменение Dim переменной / s с "integer" на "long" не имеет значения.
При подготовке к предоставлению примера кода, как показано ниже, я определил часть проблемы - похоже, это связано со скоростью. Но сначала код.
'' '' Sub FontMacroIssue ()
Dim I As Long
Dim FontCol As Long
For I = 36 To 51
FontCol = Cells(I, 10).Font.ColorIndex
If FontCol = 3 Then
Cells(I, 18) = "Red"
Cells(I, 19) = FontCol
Else
Cells(I, 18) = "Not Red"
Cells(I, 19) = FontCol
End If
Next I
End Sub
''''
Вышеупомянутое выполняется на Windows 10 64-битной машине (эта двойная загрузка в Linux ) ... это не должно иметь значения.
Если вышеуказанное выполняется как есть, то вывод в основном / полностью «не красный», а строка значений FontCol распечатывается как,
1-5-5-5-5-7-7-7-7-7-7-7-7-7-7-5-7 - и если он замедлен, как 1 3 3 3 3 1 1 1 1 1 1 1 1 1 3 1
Под замедлением я подразумеваю запуск макроса в режиме отладки с точкой останова на «Next I» или в подобном месте, а затем нажатие кнопки F5 (скажем) два раза в секунду. Результат для случая полной скорости - в основном / все «не красный», но это правильный отчет о «красном» и «не красном» при замедлении для оцениваемого шрифта.
Итак, мой вопрос / вопросы подробнее, «это нормально», «как мне лучше всего замедлить работу, чтобы получить правильный результат» ИЛИ «какой код более эффективен»? edit ...
Я склонен согласиться с Fun Thomas, поскольку даже 2 цикла / se c поднимают проблему. У меня нет ответа, но есть несколько комментариев, которые могут помочь. 1. Мой жесткий диск - твердотельный накопитель емкостью 2 ТБ. 2. В рассматриваемой электронной таблице более 46000 строк. 3. Несомненно, это более чем совпадение, что: 8-7 = 1, причем для черного шрифта указываются как 1, так и -7, а для красного шрифта - как 3, так и -5. Спасибо