【问题标题】:it is possible to call ms-Access function from outside可以从外部调用 ms-Access 功能
【发布时间】:2020-02-23 14:26:16
【问题描述】:

我在现有的 Access 表单中创建了一个公共函数,我试图从应用程序外部调用它。非常简单的函数刚刚创建用于测试它。

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,所有其他都是参数

【问题讨论】:

标签: ms-access automation scripting automationanywhere


【解决方案1】:

在表单后面运行代码需要打开表单。 在 Access 通用模块和宏中运行 Sub 和 Function 过程的 VBScript 示例。

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

我测试了调用发出 MsgBox 和 Debug.Print 的 Sub。 MsgBox 有效,Debug.Print 无效。

【讨论】:

  • 如果这是问题,我可以将其声明为 Sub。如果不打开 Access,也没有办法在后台工作?
【解决方案2】:

您可以在access vba中创建一个模块以任何形式使用它,或者独立于形式。该函数可以像这样从外部调用:

Dim appAccess As New Access.Application 
appAccess.OpenCurrentDatabase ("C:\My Documents\myDatabase.mdb") 
appAccess.Run "myDatabase.test1", "Pass your argument here"

【讨论】:

  • 试过了。使用数据库名称错误为过程添加前缀。删除它,代码就可以工作了。但仅对 Sub 而言,仍然无法弄清楚如何将参数传递给 Function。
  • 工作正常。打开 Access 数据库,但似乎没有其他方法。谢谢
  • VBA 代码由 Access 应用程序运行,而不是由数据库引擎运行。所以是的,Access 必须在数据库打开的情况下运行。 @Jonx
猜你喜欢
  • 2021-08-28
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多