从Excel管理Excel-Access链接表(推送更新)

时间:2015-10-17 08:42:37

标签: excel excel-vba ms-access linked-tables vba

关系数据存储在Excel中的表中。 Access用作查询链接的Excel表的“BI-Layer”。使用同一Excel中的枢轴进行分析,使用Excel查询作为源来保存存储的表,从而实现“往返”Excel-> Access-> Excel。

我希望单击Excel中的连接上的刷新也会提供一个选项来触发Access刷新链接表(“传递刷新”),但最后我总是要打开Access来触发刷新。

从Excel处理链接表将允许触发刷新,并且还允许多个用户共享BI逻辑。因此,链接不存储在具有本地路径的Access中,而是存储在具有Access的远程路径的Excel中。

Office 2013中是否存在内置功能?

如果没有,除了以下任何其他建议:

1)VBA和SELECT * INTO?这意味着另外需要在Access中维护表格,但提供更多类型的安全性

2)使用VBA TransferSpreadsheet acLink而不是acImport,也许甚至存在TransferTable-Method但不断创建新链接似乎比使用方法1更错误。

3)第三个选项是使用excel中的vba更新访问中的链接表(首选解决方案)。

Public Sub UpdateLinkedTables()
  Dim accApp As Access.Application
  Set accApp = CreateObject("Access.Application")
  Call accApp.OpenCurrentDatabase(Config.msaDbPath)
  Call IterateLinkedTables(accApp)
  Call accApp.CloseCurrentDatabase
  Call accApp.Quit
  Set accApp = Nothing
End Sub

Private Sub IterateLinkedTables(accApp As Access.Application)
    Dim tdf As TableDef
   'Debug.Print accApp.CurrentDb.TableDefs.Count
    For Each tdf In accApp.CurrentDb.TableDefs
     If Left(tdf.Connect, 10) = "Excel 12.0" Then
        'Debug.Print tdf.Name & "  " & tdf.Connect
        tdf.RefreshLink
     End If
    Next tdf
'Set tdf = db.TableDefs
End Sub

我能够第一次运行上面的代码而没有任何错误。但第二次正在进行中我收到运行时错误'3027':无法更新。数据库或对象是只读的。 这些表似乎无论如何都会得到更新但是我想修复错误,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

很抱歉,往返的设计工作正常。 当我在Excel中点击全部刷新时,刷新相关的访问查询,包括访问linked-excel-table,不需要执行发布的vba脚本。 我处理了大量数据,显然在单行中有错误值,这可能导致首先更新不传递。

一切顺利