Подтвердить что ты не робот

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

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

Пробовал:

  • Понимая, что я создал файл XSLX, я преобразовал его в файл XSLM. Не работает.
  • Удалены все типы из объявления функции. Не работает.
  • Перемещена функция в модуль VBA рабочего листа. Не работает.
  • Добавлена ​​публикация в декларацию. Не работает.

Что мне не хватает?

Это не умный код:

Function Square2(AnyNumber)

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

End Function
4b9b3361

Ответ 1

Ответ

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

Действия

  • Откройте редактор VBA (Alt + F11 в Windows/ Fn + Option + F11 на Mac)
  • Щелкните правой кнопкой мыши VBAProject
  • Выберите Вставить → Модуль
  • Создайте функцию Public внутри Module1, например:

    Public Function findArea(ByVal width as Double, _
                             ByVal height as Double) As Double
        ' Return the area
        findArea = width * height
    End Function
    
  • Вызовите его из ячейки, как и любая другая функция: =findArea(B12,C12)

Macro Screenshot

Ответ 2

Я столкнулся с одной и той же проблемой, после того, как я боролся за мной, работая для меня:

Моя функция была внутри модуля в макро-книге Personal.XLSB. Я префикс имени функции с именем файла персональной макрокоманды и!, Поэтому, если имя функции - это функция (x, y), я ввел в ячейку "= PERSONAL.XLSB! The Function (x, y)). Это сработало.

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

Ответ 3

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

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

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

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

- fooobar.com/questions/260072/...

Ответ 4

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

Ответ 5

Файл 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

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

Ответ 6

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

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

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

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

Ответ 8

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

Ответ 9

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

  • Сохраните свои книги как .xlsm
  • Включить макросы, как указано выше
  • Установите ссылку. В VBA (Alt-F11) выберите "Инструменты/Ссылки", затем перейдите к книге, содержащей макрос, который вы хотите использовать. Проверьте эту ссылку в списке.

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