Помещение Excel UDF в объект Worksheet (в отличие от модуля)

Я подозреваю, что ответ «невозможно» - но нет ничего плохого в том, чтобы спросить это прекрасное сообщество!

У меня есть UDF (определяемая пользователем функция) Excel 2013, уникальная для определенного рабочего листа.

В настоящее время у меня есть эта UDF в «Модуле» в рабочей книге. Но я бы хотел поместить код UDF в «Объект рабочего листа», чтобы он был только доступным для этого конкретного рабочего листа.

Я, конечно, пробовал, но этого не видно, поэтому я, естественно, получаю # ИМЯ? ошибка. Я пробовал предварять функцию с помощью Public (что в любом случае победило бы объект), но безрезультатно.

Кто-нибудь знает про конкретный трюк?

Заранее спасибо, Ник.


person Nic    schedule 19.09.2014    source источник
comment
Это невозможно. UDF должны находиться в обычном модуле.   -  person Rory    schedule 19.09.2014
comment
Спасибо ... Я подозревал это после того, как попробовал. Если бы вы сформулировали это как ответ, я мог бы вознаградить вас за ответ! Но в любом случае спасибо еще раз.   -  person Nic    schedule 19.09.2014
comment
Я добавил это как ответ. :)   -  person Rory    schedule 19.09.2014


Ответы (2)


В зависимости от требований вашей функции у вас может быть предложение, которое возвращает только правильный ответ на предполагаемом рабочем листе.

Допустим, ваша функция принимает диапазон в качестве входных данных, т.е.

Function CheckSheet(r As Range)
    If r.Parent.Name = "Intended Sheet Name" Then
        CheckSheet = "The correct value!"
    Else
        CheckSheet = CVErr(xlErrNA)
    EndIf
End Function

РЕДАКТИРОВАТЬ:

предыдущая версия все еще может использоваться на другом листе, если диапазон, который она принимает в качестве параметра, находится на предполагаемом листе. Его можно изменить на:

Function CheckSheet()
    If Application.Caller.Parent.Name = "Intended Sheet Name" Then
        CheckSheet = "The correct value!"
    Else
        CheckSheet = CVErr(xlErrNA)
    EndIf
End Function

Где Application.Caller возвращает ячейку, содержащую функцию.

person citizenkong    schedule 19.09.2014

Это невозможно. UDF должны находиться в обычном модуле. :)

person Rory    schedule 19.09.2014