Функция, которая будет использоваться в качестве пользовательской функции (UDF), должна быть в модуле , а не в объекте рабочей книги (например, в рабочей таблице).
Кроме того, пока она отображаетсявозможно, ваш UDF не должен вызывать какого-либо взаимодействия с пользователем (например, MessageBox).Помните, что ваши пользовательские функции могут быть пересчитаны на любом этапе (хорошо, с хорошо понятными и иногда менее понятными триггерами), и вы не хотите, чтобы ваш пользователь был завален окнами сообщений в кажущемся бесконечном цикле (например, попробуйте установить окно сообщения в пользовательской функции).затем он реплицируется на 1000 ячеек!)
Когда я выполняю кодирование VBA, я создаю модель с именем (образно!) «UDF», в которой я храню все свои UDF.Это облегчает мне понимание того, какие функции являются частью внутреннего кода, и какие функции специально предназначены для использования во внешнем интерфейсе.
Суть в том, что UDF представляет функцию - простуювходы и только один выход.Следующий модуль должен быть помещен в модуль:
Option Explicit
Public Function TestMacro(inputcell as range) As Boolean
If Len(inputcell.Value) <> 9 Then
TestMacro = False
Else
TestMacro = True
End If
End Function
В ячейке (не A1, той, в которой вы хотите получить результаты):
=TestMacro(A1)
Вы можете сделать несколько более сложныхвещи, и включают дополнительную проверку ошибок и возвращают ошибки Excel, такие как #Value
, #Ref
, #Name
- но это вопрос для другого дня.