关系数据存储在Excel中的表格中。Access作为"双层"查询链接的Excel表。分析是在使用Excel查询作为源保存存储表的同一个Excel中使用数据透视完成的,导致"往返"Excel->Access->Excel。
我希望在Excel中单击连接上的刷新也会提供一个触发Access来刷新链接表的选项("传递刷新"),但最后我总是必须打开Access来触发刷新。
处理来自Excel的链接表将允许触发刷新,并且还允许多个用户共享BI逻辑。因此,链接不是以本地路径存储在Access中,而是以远程路径存储在Excel中。
Office 2013中是否存在内置功能?
如果没有,还有其他建议吗?
1) VBA和SELECT * INTO?这意味着在Access中需要额外维护结构化的表,但要提供更多的类型安全性
2)使用VBA TransferSpreadsheet acLink而不是acImport,也许甚至存在一个TransferTable-Method,但不断创建新的链接似乎比使用方法1更错误。
3)第三个选择是从excel中使用vba更新access中的链接表(首选解决方案)。
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':无法更新。数据库或对象是只读的。表格似乎得到更新,无论如何,但我想修复错误,有什么建议吗?
抱歉,显然往返工作按设计。当我在Excel中点击刷新时,相关的访问查询被刷新,包括访问链接的Excel表,不需要执行发布的vba脚本。我处理了很多数据,显然在单行中有错误值,可能首先导致不可传递更新。
祝一切顺利