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

MS Access RunCode Macro не может найти мою процедуру

Я только публикую это, так как я не смог найти решение нигде. Я наконец-то понял. На самом деле глупо.

При использовании свойства RunCode в макросе доступа я пытался запустить Sub из моего глобального модуля. Я получаю сообщение об ошибке "Введенное выражение имеет имя функции, которую база данных не может найти". Я не мог понять, в чем проблема. Я последовал советам всех, кто опубликовал эту проблему, которая была в основном следующей:

  • Используйте() в конце имени процедуры
  • НЕ используйте "=" перед именем процедуры

Все еще не сработало!

4b9b3361

Ответ 1

Затем я внимательно прочитал сообщение об ошибке. В нем упоминается, что он не мог найти имя функции. По-видимому, свойство RunCode специально требует "Function", а не Sub. Итак, я просто сменил Sub на Function, и он работал нормально!

Надеюсь, что это поможет.

Ответ 2

Другое решение, которое сработало для меня:

Имя модуля не может иметь то же имя, что и процедура (и) в модуле (-ях).

Ответ 3

У меня была аналогичная проблема с сообщением об ошибке. Мой код VBA имел следующее объявление:

private function MyFunction()

....

end function

Я удалил объявление private, чтобы получить Macro Runcode для выполнения MyFunction()

Например:

Function MyFunction()

End Function

Ответ 4

Доступ к 2013 году: функция, вызванная с MyFunction() из RunCode, где MyFunction не существует, дает мне ошибку 2425. Однако для меня ничего не работает, и я все еще получал номер ошибки 2001, когда функция существует и является общедоступной, База данных находится в надежном месте. Ошибок компиляции нет, но что-то в MyFunction не работает, а именно

DoCmd.ShowAllRecords 

после того, как GoToControl работал над выбором моей подформы. Реальной проблемой был мой код для удаления фильтра с помощью VBA. Руководство для ShowAllRecords, по-видимому, указывает на то, что это должно работать, но вместо DoCmd.ShowAllRecords с

DoCmd.RunCommand acCmdRemoveFilterSort 

исправлена ​​моя проблема.

Ответ 5

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

Ответ 6

Я хотел поблагодарить Джона Типтона и добавить новую информацию. Я использовал MS Access 2016 и начал эту проблему, так что эта проблема все еще поднимает свою уродливую голову. Для моего работы имя функции и имя макроса должны быть разными, а в коде после функции myFunc() имя должно отличаться от имени модуля, которое вы видите на панели доступа. Еще одна странная вещь. Когда я выбрал RunCode в Macro, он покажет мне функцию (она не покажет мне модули Sub VBA), которую я пытался выбрать, но когда я ее выбрал, Macro закодировал ее как имя функции с одним левым символом "(". Это было запущено на машине Windows 8 Pro.

Ответ 7

Моя ошибка заключалась в помещении функции в модуль класса вместо обычного модуля.

Ответ 8

Access Office 365. Моя подпрограмма работает, когда вызывается из VBA и используется для работы в макросах. Перенес функциональный текст в отдельный модуль, сохранил его сам. Дали модулю (не классу) уникальное имя.