можно вызвать функцию ms-Access извне - PullRequest
0 голосов
/ 28 октября 2019

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

Public Function test1(ByVal test1 As String)
    Dim xlApp As New Excel.Application
    xlApp.Visible = False

    Dim wb As Excel.Workbook
    Set wb = xlApp.Workbooks.Add

    Dim ws As Excel.Worksheet
    Set ws = wb.Worksheets(1)
End Function

Я создал соединение с ней, на Automation Anywhere, и я пытаюсь вызвать созданную функцию.

Строка подключения, используя:

Provider=Microsoft.ACE.OLEDB.16.0;Data Source="$connection$";Jet OLEDB:Database Password="$pass$"

Попытка сделать это, без успеха

Select test1("test")
EXEC test1("test1")
EXECUTE test1("test1")

Также с простым '

Нет способа сделать это на фоне, как предложено ниже, я создал подпрограмму и вызвал ее из скрипта VB

Set appAccess = CreateObject("Access.Application")  
appAccess.OpenCurrentDatabase "RUTA ACCESS",,"CONTRASEÑA"
appAccess.UserControl = True
appAccess.Run "generarEtiqueta","numPropuesta","numExp","fileSavePath"   
appAccess.CloseCurrentDatabase
appAccess.Quit

generarEtiqueta - этоsub, все остальные аргументы

Ответы [ 2 ]

1 голос
/ 28 октября 2019

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

Dim appAccess As New Access.Application 
appAccess.OpenCurrentDatabase ("C:\My Documents\myDatabase.mdb") 
appAccess.Run "myDatabase.test1", "Pass your argument here"
1 голос
/ 28 октября 2019

Выполнение кода за формой требует, чтобы форма была открыта. Пример сценария VBScript, выполняющего процедуры Sub и Function в общем модуле Access, а также макрос.

Dim ObjAccess
Set ObjAccess = CreateObject("Access.application")
ObjAccess.visible = false
ObjAccess.OpenCurrentDatabase("filepath\filename.accdb") 
ObjAccess.Run("FunctionName")    'not finding a way to pass argument to Function
ObjAccess.Run "SubName", "argument" 'if Sub does not require argument then eliminate
ObjAccess.DoCmd.RunMacro "MacroName" 
ObjAccess.Quit
Set ObjAccess = Nothing

Я протестировал вызов Sub, который выпустил MsgBox и Debug.Print. MsgBox работает, Debug.Print - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...