【问题标题】:Import an Access Table in MS Excel在 MS Excel 中导入访问表
【发布时间】:2018-10-05 07:34:51
【问题描述】:

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

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

我们的想法是提取所有这些表以在 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"

我尝试将 Path 定义为 String,添加、删除双引号等等。

【问题讨论】:

  • 欢迎来到 SO。我可以建议你一个不同的方法吗?我的意思是,我已阅读 并且感兴趣的表始终是“CONFIG”。我们的想法是提取所有这些表以在 Excel 中编译它们的数据库。我建议使用Range.CopyFromRecordset Method (Excel)。我认为这将是编译所有 configs 表的最佳方式。只是一个建议。

标签: excel vba ms-access import


【解决方案1】:

连接变量是使用& 完成的,而不是将它们放在" 之间。否则,您指的是变量本身的名称,而不是它的值。在具体问题中,这是:

  • ...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 中得到这个:

【讨论】:

  • Vityata,我尝试连接“路径”,但仍然收到错误 1004。我尝试过 ...File.Contents(" & Path & ") 和 .File.Contents( Path )。不幸的是,两者都不起作用。
  • @Astrashar - 太多的东西是字符串,而它们应该是变量。例如,如果你想通过Access.Database(File.Contents(""Path"")获取Path的内容,那么它前面不应该有",因为它使它成为一个字符串。按照上面TestMe() 中的小例子,使用& 连接字符串中的变量。
  • Vityata - TestMe() 示例工作正常,我过去从未遇到过连接问题。这是我目前的问题。在这种情况下,我在文件路径前面得到了这些双“”。它们也出现在原始代码中。我不明白的是 File.Contents() 似乎可以使用字符串作为输入。 FileContents(Path) 应该可以工作,但是...不行
  • @Astrashar - 你能编辑你的问题,明确写两行。一个有效(将路径写为地址)和一个无效(将路径作为变量)?这会减轻工作量。只需确保只添加两行,这样会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2017-12-24
  • 2021-05-25
  • 1970-01-01
  • 2017-05-17
  • 2013-06-16
相关资源
最近更新 更多