Как вызвать функцию VBA из ячеек Excel (2010)?

Я определил несколько функций в книге с помощью VBA, а затем ожидал, что смогу использовать их в Формуле ячейки, но Excel не распознает функцию. Я просто получаю #NAME?

пробовал:

  • поняв, что я создал файл XSLX, я преобразовал его в файл XSLM. Не получилось.
  • удалены все типы из объявления функции. Не получилось.
  • переместил функцию в модуль рабочего листа VBA. Не получилось.
  • добавил Public to the declaration. Не получилось.

что я упустил?

это тоже не умный код:

Function Square2(AnyNumber)

'return the square of any integer
Square2 = AnyNumber * AnyNumber

End Function

9 ответов


ответ

размещение функции в области "ThisWorkbook" может привести к #NAME? проблема. Создать новый модуль (щелкните правой кнопкой мыши на папке VBAProject, вставить, новый модуль) и поставьте вместо этого функцию.

шаги

  1. откройте редактор VBA (Alt + F11 в Windows / Fn + Option + F11 на Mac)
  2. щелкните правой кнопкой мыши виде vbaproject
  3. выберите Вставить >> Модуль
  4. создать а


Я столкнулся с той же проблемой, после борьбы вокруг следующего работал для меня:

моя функция была внутри модуля в книге макросов под названием Personal.Файл xlsb. Я поставил префикс имени функции с именем файла личной книги макросов и !, поэтому, если имя функции-это функция (x, y), которую я ввел в ячейку "=PERSONAL.Файл xlsb!функция (x, y). Это сработало.

пожалуйста, обратите внимание, что личное.XLSB всегда открыт в скрытом режиме для меня.


убедитесь, что вы не находитесь в режиме проектирования.

на вкладке разработчик в excel и рядом с кнопками run/stop в Редакторе VBA есть кнопка режима проектирования. Если он выбран и не позволяет снять его, попробуйте снова открыть книгу с включенными макросами.

Если он все еще включен или не позволяет запускать макросы, убедитесь, что макросы включены.

активировать макросы.

-- https://stackoverflow.com/a/20659823/258482


У меня была идентичная проблема, включая рабочую функцию, которая позже перестала работать с ошибкой #NAME. Мне удалось исправить, чтобы оба, убедившись, что имя модуля не совпадает с именем функции. У меня была рабочая функция F_1 в Module1, я изменил имя модуля на F_1, и он перестал работать, теперь вернулся в Module1, и функция снова работает. Моя вторая функция также начала работать, когда я изменил имя модуля с F_2 на Module2.


XLSX-файл и XLSM-файлы не имеют к этому никакого отношения. Формат играет роль при сохранении файла. (В XLSX код VBA будет удален при сохранении файла).

приведенный ниже код из http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspx работает довольно хорошо внутри нового модуля в моем excel.

Function Discount(quantity, price)
    If quantity >= 100 Then
        Discount = quantity * price * 0.1
    Else
        Discount = 0
    End If
    Discount = Application.Round(Discount, 2)
End Function

учитывая, что я не вижу ваш код, можете ли вы попробовать, работает ли для вас функция ниже? Если это так, начните изменять функция ниже, чтобы она стала вашей функцией (например, сначала измените имя и посмотрите, работает ли она, а затем измените количество параметров и проверьте, работает ли она, а затем измените имя параметров).


Я открыл Excel, открыл редактор кода (Alt+F11), выбрал новую книгу, вставил новый модуль, набрал

Function Decrement(i As Integer) As Integer
  Decrement = i - 1
End Function

затем вернулся к моей книге и в A1 набрал =Decrement (2) и нажал Enter, и это сработало. Декремент появился в раскрывающемся списке функций, когда я набрал =Decr... Было признано, и это сработало. Мне даже не пришлось спасать тетрадь.

Я знаю, что это не совсем ответ на ваш вопрос, но это рецепт мне повезло с.


активировать макросы.


Я думаю, что может возникнуть проблема, если ваш модуль имеет то же имя, что и ваша функция. Попробуйте переименовать модуль или функцию.


Если вы используете последние версии Excel, чтобы увидеть функции VBA в другой книге, вам нужно:

  1. сохранить книги как .файл xlsm
  2. включить макросы, как предложено выше
  3. установить ссылку. В VBA (Alt-F11) выберите инструменты/ссылки, затем перейдите к книге, которая содержит макрос, который вы хотите использовать. Проверьте эту ссылку в списке.

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