Как вызвать функцию VBA из ячеек Excel (2010)?
Я определил несколько функций в книге, используя VBA, а затем ожидал, что смогу использовать их в формуле ячейки, но Excel не распознает эту функцию. Я просто #NAME?
Пробовал:
- Понимая, что я создал файл XSLX, я преобразовал его в файл XSLM. Не работает.
- Удалены все типы из объявления функции. Не работает.
- Перемещена функция в модуль VBA рабочего листа. Не работает.
- Добавлена публикация в декларацию. Не работает.
Что мне не хватает?
Это не умный код:
Function Square2(AnyNumber)
'return the square of any integer
Square2 = AnyNumber * AnyNumber
End Function
Ответы
Ответ 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... Было признано, и это сработало. Мне даже не нужно было сохранять книгу.
Я знаю, что это не совсем ответ на ваш вопрос, но это рецепт, которому мне повезло.
Ответ 7
Активировать макросы.
Ответ 8
Я думаю, что может возникнуть проблема, если ваш модуль имеет то же имя, что и ваша функция. Попробуйте переименовать ваш модуль или свою функцию.
Ответ 9
Если вы используете последние версии Excel, чтобы увидеть функции VBA в другой книге, вам необходимо:
- Сохраните свои книги как .xlsm
- Включить макросы, как указано выше
-
Установите ссылку. В VBA (Alt-F11) выберите "Инструменты/Ссылки", затем перейдите к книге, содержащей макрос, который вы хотите использовать. Проверьте эту ссылку в списке.
Если вы получите сообщение об ошибке об именах модулей, то сначала переименуйте его в проводник проекта.