访问VBA:使用AutoExec宏更新参考库,工作是accdb格式,但在编译时不是?



这是我要在MS Access 2010中执行的VBA代码。为简单起见,我删除了此代码中的错误处理。函数驻留在具有不同名称的模块中。

Public Function ReAddLibrary()
Dim accessProj As Access.Application 
Dim chkRef As Access.Reference ' 
Set accessProj = Access.Application
   ' Check through the selected references.
   For Each chkRef In accessProj.References
      ' If the reference "MyReference" exists then remove.
      If chkRef.Name = "MyReference" Then
         accessProj.References.Remove chkRef
         Exit For
      End If
   Next
‘ Add back the reference “MyReference” from specified location.   
accessProj.References.AddFromFile "Access Database Path"
End Function

改编自
https://msdn.microsoft.com/en-us/library/aa221567(v=office.11).aspx


前提
用户,使用 Access 数据库作为前端,自然会有一组。一个共同点是它们共享对包含共享函数的 accde 数据库的引用。当然,编译这些数据库是为了阻止用户进入 VBA/设计模式。还会编译正在引用的数据库。当前正在对其 accdb 等效项执行工作,每次将其发布为数据库位置的 accde 时,都会创建一个未解析的引用。引用路径未更改位置(也不会更改)。 所有收件人 Accdb 数据库都工作正常,但是当单击按钮链接的子例程时,它们的等效编译版本会引发一般错误。

如果我将上面的代码用作链接到单击事件(例如"加载时")的子例程,用于包含相关按钮的表单,则此代码可以完美运行,甚至可以编译。但是如果我将其转换为函数并将其链接到名为" AutoExec "的宏,它将在打开数据库时执行宏,但会。

  • 在未编译的数据库中工作
  • 编译数据库时将不起作用

AutoExec 宏路由是因为我只想将此代码粘贴一次并在用户打开数据库时执行一次,因此重新创建引用而不会中断。


宏观

Action: RunCode  
Function Name: ReAddLibrary ()  

我的想法

最初,我已经将后期绑定作为一种解决方案进行了研究,但我发现很难掌握,因为我并没有真正用 VBA 编码,我主要用 sql 编码,因此错过了智能感知和语法突出显示。所有示例都适用于 excel 工作簿,因此难以关联。我的所有用户和我自己都使用相同的 Access 2010,因此没有版本冲突。所以我不知道这是否是答案。

http://www.granite.ab.ca/access/latebinding.htm

我考虑运行一个脚本来重新编译所有用户的数据库。但是,对引用数据库的工作是逐步进行的,将人们引导出去将是一个麻烦。

  • 为什么,当编译版本仍然保留正确的 accde 文件路径不起作用,当只是引用的数据库再次重新编译?
  • 是否可以以编程方式删除引用(如果存在)并添加引用,当 Access 的编译版本启动时,例如将其链接到名为AutoExec的宏?
  • 有没有另一种方法可以运行上述代码而无需将其添加到所有表单对象的"事件"中?尽我所能节省我的时间将代码集中在一个地方。

有什么想法吗?

简单而可悲的答案是,每当代码和/或引用发生更改时,都必须编译项目。

因此,完成后,您必须将项目accde文件及其外部文件(实际上全部更新的文件)分发给用户。

最新更新