Правильно называть клетку формулой из макроса в Excel VBA
Я пытаюсь разработать небольшой планировщик в Excel, чтобы управлять своей жизнью немного лучше. Я использую разные цвета ячеек для каждого события (желтый для работы, красный для университета и т. Д.). У меня уже есть макрос CountColor
который считает появление цвета в определенном диапазоне, который работает нормально (я в значительной степени скопировал его из онлайн-решения). Теперь я использую макрос для вычисления использованного времени в ячейках, например:
клетки содержат =ColorCount(H5;B2:F15)
тогда как внутренний цвет первого аргумента определяет цвет для подсчета, а параметр секунд - это диапазон для подсчета цвета. Этот макрос работает отлично. Последнее число является просто суммой трех вышеупомянутых.
Однако теперь я сталкиваюсь с проблемой, заключающейся в том, что изменение внутреннего цвета ячейки не вызывает перерасчета формул. Я создал простую кнопку (не ActiveX) и назначил ей макрос:
Public Sub CalcButton_onclick()
Worksheets(1).Range("I13:I16").Calculate
End Sub
но когда я нажимаю кнопку (я также пытался пересчитать весь лист с помощью Worksheets(1).Calculate
) Ничего не произошло. Например, только когда я изменяю значение в ячейке, мое время пересчитывается. Макрос моей кнопки определенно выполнен, я проверил это, добавив Worksheets(1).Cells(20, 20).Value = "Test"
после Calculate
вызов и он изменил значение данной ячейки правильно.
В целях завершения я также добавляю код макроса CountColor:
'counts the occurence of the interior color of rColor in rRange
Public Function ColorCount(ByRef rColor As Range, ByRef rRange As Range) As Integer
Dim rCell As Range
Dim lCol As Long
Dim vResult As Integer
vResult = 0
lCol = rColor.Interior.ColorIndex
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
ColorCount = vResult
End Function
Я не совсем уверен, в чем проблема, но я думаю, что, возможно, неправильно истолковал Calculate
метод. Я только создал 2 макроса выше. Я ценю любую помощь!
Кстати, что-то мета: это правильное использование картинки в вопросе? Я не мог придумать лучшего способа показать, как я хочу, чтобы мой результат выглядел.
2 ответа
Я сам нашел проблему.
Сначала я хочу поблагодарить всех за их советы и подсказки. Вероятно, они понадобились бы мне после исправления моей первоначальной проблемы, поэтому я решил их заранее:)
На самом деле моя проблема заключалась в том, что я хотел объявить свое свободное время белым цветом. Но на самом деле у меня было несколько ячеек, у которых после заливки каждой свободной ячейки явно белым было "нет цвета заливки", теперь она работает с кнопкой. Решение с Worksheet_Change()
Метод в коде листа, к сожалению, не работает, потому что изменение цвета не оценивается как изменение в листе. Worksheet_SelectionChange()
однако сделал трюк с обновлением, когда вы нажимаете на другую ячейку, поэтому мне больше не нужна кнопка.
Помогло бы сделать ваш UCF изменчивым с помощью colorcount UDF (добавьте Application.Volatile), но, как вы обнаружили, изменение цвета или форматирование ячейки не вызывает перерасчет, поэтому даже изменяемый UDF не будет пересчитываться только при изменении цвета.
Если вы сделаете свой UDF изменчивым, то Range.Calculate должен вызвать пересчет в режиме автоматического расчета.