Запуск функции MS Access 2016 VBA через макрос, затем запуск этого макроса через Excel - PullRequest
0 голосов
/ 28 февраля 2019

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

Текущая подпрограмма читает что-то вроде следующего.

Public Sub Command42_Click()

'Clear All Tables
DoCmd.RunSQL "DELETE * FROM dbo_Tbl1"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl2"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl3"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl4"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl5"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl6"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl7"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl8"

  Dim strSQL     As String

  Dim strLocalTable  As String

'Data Download

  With CurrentDb.QueryDefs("setup_PTQ")
     .SQL = "select * from SQL_Server_tbl"
  End With

  strLocalTable = "dbo_tbl1"

  CurrentDb.Execute "INSERT INTO " & strLocalTable & " SELECT * FROM setup_PTQ"

DoCmd.OpenQuery "qry_1"
DoCmd.Close acQuery, "qry_2"

End Sub

Я для краткости сократил код, но шаг загрузки данных повторяется и для таблиц 2 - 8.

Этот код прекрасно работает в форме доступаКнопка и не нуждается в редактировании.

Когда я копирую этот код в автономный модуль и запускаю его, он также работает.

Мои проблемы начинаются, когда я пытаюсь вызвать недавно разработанный Модуль в макрос.

Я установил шаг кода выполнения, ввел имя новой функции (например, меняю Command42_Click() на Test() и это то, что я вызываю), а затем он возвращает ошибку.

Появляется окно сообщения с текстом:

«Введенное выражение имеет имя функции, которое Microsoft Access не может найти»

изатем говорит мне, что номер ошибки 2425 и что аргумент "Test()" - это то, что не может быть найдено.

В конечном счете, я хочу вызвать этот макрос с выражением .RunMacro VBA в Excel, чтобы конечному пользователю никогда не приходилось прикасаться к БД MS Access.

В конце концов, я просто ищу способ запустить приведенный выше код из Excel, поэтому, если кто-то может предложить лучшее решение, чем исправление этой ошибки, я открыт для этого, как.

Заранее спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Вам нужно изменить Public Sub на Public Function (или просто Function, так как Public - область по умолчанию), находящееся в модуле, чтобы его можно было оценить из RunCodeдействие макроса MS Access.

Из документации MS Access :

Вы можете использовать действие макроса RunCode в базах данных рабочего стола Access для вызоваVisual Basic для приложений (VBA) Функция Процедура.

Кроме того, вы можете создать функцию, которая просто вызывает ваш Sub, например:

Function Test()
    Call Command42_Click
End Function

А затем вызовите эту функцию из действия RunCode вашего макроса.

...