#ИМЯ? ошибка в Excel для функции VBA

Я делаю свою первую программу VBA и пытаюсь запустить следующую функцию. Функция проверяет определенный именованный диапазон для первой строки, который не имеет значения больше, чем его ведущее значение, но меньше 1.

Public Function findPurchase()

Dim CRT As Range
Set CRT = Range("CostRateTable")

Dim existsBetter As Boolean
existsBetter = True

Dim r As Integer
r = 2
Dim c As Integer
c = 4

While existsBetter

    Dim Found As Boolean
    FoundBetter = False

    While Not FoundBetter And c <= CRT.Columns.Count
        If CRT(r, c) > CRT(r, 2) And CRT(r, c) < 1 Then
            FoundBetter = True
        Else
            c = c + 1
        End If
    Wend


    existsBetter = FoundBetter
    If existsBetter Then
        r = r + 1
    End If
Wend

findPurchase = CRT(r, 3)
'MsgBox(findPurchase)
End Function

Я знаю, что функция выполняет то, на что она предназначена, потому что я вручную проверил таблицу значений, удалил комментарий из MsgBox и использовал инструменты отладки для входа и выхода из каждого из шагов функций, поскольку он прошел через стол. Однако, когда я ссылаюсь на функцию в Excel с помощью =findPurchase(), мне присваивается ошибка #NAME?. Функция даже появляется в окне автозаполнения функции, когда я начинаю вводить ее имя. Когда я пишу другие функции, как с параметрами, так и без них, я могу ссылаться на них просто отлично, например:

Function addtwo()
    addtwo = 1 + 2
End Function

Что я делаю неправильно с моей функцией, которая заставляет ее не работать?

Ответ 1

Вы получаете эту ошибку, потому что у вас есть модуль с тем же именем, что и функция.

enter image description here

Измените это имя, чтобы сказать find_Purchase, и все будет хорошо:) Смотрите изображение ниже...

enter image description here

Ответ 2

У меня была такая же проблема. Оказалось, что "Saved As..." другой файл и макросы не были включены для этого файла. Не появился баннер сверху, но была создана ошибка #NAME?. Я снова открыл файл, включил макросы, и проблема была решена.

Ответ 3

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

Ответ 4

Когда Excel открывает нераскрытую книгу, содержащую VBA-код, обычно запрашивается, чтобы макросы были включены пользователем (в зависимости от настроек приложения).

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

Пользовательские функции VBA, однако, требуют полного пересчета рабочей книги. В противном случае функции return-value все равно #NAME, так как расчет производится только после открытия книги.

Чтобы работать непосредственно при первом открытии, нужно добавить следующую строку в событие workbook_open

'
' Workbook open event
Private Sub Workbook_Open()
    Application.CalculateFullRebuild
End Sub

Ответ 5

У меня была аналогичная постоянная проблема с одной из моих функций, когда все остальное казалось прекрасным. Откройте рабочий лист и перейдите на вкладку "Разработчик". Откройте VBA, а на ленте разработчика выберите "Просмотреть код". Посмотрите, открывает ли он какой-либо аналогичный код (кроме вашего модуля), характерный для этого листа (например, Sheet2 (Code)). Я обнаружил, что в дополнение к модулю я дублировал код на листе. Удалите код "рабочего листа". Возможно, вам нужно будет сохранить книгу и повторно открыть на этом этапе). Когда я удалил код рабочего листа, функция модуля затем работала.

Ответ 6

В дополнение к проверке некоторых из вышеперечисленных элементов вам может потребоваться указать имя файла, в котором пользовательская функция фактически определена, например. содержимое ячейки  = XLstart.xlsm! MyCustomFunc (arg1, Arg2) где myCustomFunc определен в файле запуска XLstart.xlsm.

После справки Excel для "Исправить ошибку #NAME?":

В строке формул выберите имя функции [подозреваемого]. В поле "Имя" (слева от панели формул) щелкните стрелку, а затем выберите [определяемую пользователем] функцию из списка, который предлагает Excel.

Это добавит имя файла в указанном выше формате.

MS 2010, Windows 10.

Ответ 7

Установите флажок "Доверять доступ к объектной модели проекта VBA" в настройках макроса из безопасности макросов

Ответ 8

True, У меня было то же самое (в Excel 2010), и когда я перешел в Excel 2016, был показан прототип функции, но когда я завершил эту функцию, ошибка #NAME была показана всплывающим окном... поэтому код никогда не запускался.

Оказалось, что у меня есть макрос с тем же именем, что и функция Sub или UDF! Я переименовал макрос, а затем он работал

Приветствия

Ответ 9

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

Ответ 10

Одна из причин этой проблемы - ограничения безопасности. У меня была эта проблема, и я активировал "Включить все макросы" из центра безопасности, и проблема была решена.