Почти вес пользователи, которые начинают создавать свои функции работы с листами с помощью VBA, делают роковую ошибку: они пытаются заставить функцию делать больше, чем это возможно.
Функция работы с листами возвращает значение и должна быть полностью пассивной: другими словами, она не должна ничего изменить в листе. Например, вы могли бы написать функцию наподобие следующей. Эта функция принимает один аргумент (ссылку на ячейку) и пытается изменить форматирование ячейки. Несмотря на то что данная функция содержит вполне корректный код VBA, она не делает шрифт в ячейках полужирным:
1 2 3 4 5 6 7 | Function MakeBold(cell) If cell.Value > 100 Then cell.Font.Bold = True Else cell.Font.Bold = False End If End Function |
Во многих случаях вы можете применять макрос события, а не пользовательскую функцию. Следующий макрос, расположенный в модуле для листа, выполняется, когда лист рассчитывается. Если ячейка А1 содержит значение, большее 100, то она выделяется полужирным шрифтом; в противном случае она не выделяется:
1 2 3 4 5 6 7 | Private Sub Worksheet_Calculate() If Range("A1").Value > 100 Then Range("A1").Font.Bold = True Else Range("A1").Font.Bold = False End If End Sub |
Этот простой пример приведен лишь в качестве иллюстрации. Более эффективное решение — применение возможностей условного форматирования в Excel.
Как обеспечить вывод значений выпадающего списка с двоеточием, как в бухгалтерских программах?
Как при помощи инструментов Excel решить задачу о коробке максимального объема
Построение графика функции одной переменной средствами Excel
Как правильно вводить, редактировать и копировать формулы в таблицах Excel
Как в Excel обойтись без подстановки шрифтов при применении малых кеглей