Microsoft Excel

трюкиприёмырешения

VBA и макросы
20.04.2013 3982

Какие существуют ограничения пользовательских функций в Excel

Почти вес пользователи, которые начинают создавать свои функции работы с листами с помощью 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.

Top