首页 > 解决方案 > 在 MS Excel 中导入访问表

问题描述

我必须从 Access 文件、Test.accdb 和名为“CONFIG”的表中导入信息。

我有许多 Access 文件,它们总是以相同的方式生成,感兴趣的表总是“配置”。

这个想法是提取所有这些表以在 Excel 中编译它们的数据库。

没有任何 Access 经验,我使用 Excel 中的宏记录器:

ActiveWorkbook.Queries.Add Name:="CONFIG", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Access.Database(File.Contents(""C:\Users\Astrashar\Desktop\Projet\Test.accdb""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    _CONFIG = Source{[Schema="""",Item=""CONFIG""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    _CONFIG"

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""CONFIG"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [CONFIG]")
        .ListObject.DisplayName = "CONFIG"
        .Refresh BackgroundQuery:=False
End With

该代码有效,但是当我尝试在代码中修改“C:\Users\Astrashar\Desktop\Projet\Test.accdb”以放置一个变量时,将其称为“Path”,我得到一个错误:

1004 “应用程序定义或对象定义错误”。

重新设计的代码如下:

Dim Path
Path = "C:\Users\Astrashar\Desktop\Projet\Test.accdb"

ActiveWorkbook.Queries.Add Name:="CONFIG", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "   ' Source = Access.Database(File.Contents(""Path""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    _CONFIG = Source{[Schema="""",Item=""CONFIG""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    _CONFIG"

我尝试将路径定义为字符串、添加、删除双引号等。

标签: excelvbams-accessimport

解决方案


连接变量是通过&而不是将它们放在". 否则,您指的是变量本身的名称,而不是它的值。在具体问题中,这是:

  • ...File.Contents(""Path""), [CreateNavigationProperties...

应该:

  • ...File.Contents(" & Path & "), [CreateNavigationProperties...

能够得到 的值Path。某处可能还有另一个错误。


这是一个最小的示例,将 Excel 中的字符串变量与其他字符串连接起来:

Sub TestMe()

    Dim path As String
    path = "C:\Users\Astrashar\Desktop\Projet\Test.accdb"    
    ActiveSheet.Range("A1") = "Some predefined text " + path

End Sub

在 A1 中得到这个:

在此处输入图像描述


推荐阅读