MS Access RunCode Macro не может найти мою процедуру
Я только публикую это, так как я не смог найти решение нигде. Я наконец-то понял. На самом деле глупо.
При использовании свойства RunCode в макросе доступа я пытался запустить Sub из моего глобального модуля. Я получаю сообщение об ошибке "Введенное выражение имеет имя функции, которую база данных не может найти". Я не мог понять, в чем проблема. Я последовал советам всех, кто опубликовал эту проблему, которая была в основном следующей:
- Используйте() в конце имени процедуры
- НЕ используйте "=" перед именем процедуры
Все еще не сработало!
Ответы
Ответ 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 и используется для работы в макросах. Перенес функциональный текст в отдельный модуль, сохранил его сам. Дали модулю (не классу) уникальное имя.