【问题标题】:CSV into a table inside a MS Access database using Excel VBA使用 Excel VBA 将 CSV 转换为 MS Access 数据库中的表
【发布时间】:2013-08-05 04:58:46
【问题描述】:

我希望能够获取一个类似 http://ichart.yahoo.com/table.csv?s=^GSPC 的 csv 文件,该文件位于工作簿文件夹中 并将其作为一个已存在的空白 MS Access 数据库中名为 GSPC 的表。空白数据库文件将位于同一文件夹中并命名为 tblImport.accdb。我查看了许多论坛主题,发现对于像我这样的菜鸟来说没有什么简单的。我很高兴能得到任何帮助。

【问题讨论】:

  • 至少试一试,人们会有一些动力来帮助你。
  • 如果您计划使用 VBA,则需要查看 SQL Create 以创建表格,并查看 stackoverflow.com/questions/9564908/… 以查看如何打开 CSV。此外,如果您打算在之后处理数据,请查看记录集。
  • 我不明白您为什么要让 Excel 参与其中。如果要使用 VBA 将 CSV 导入 Access,可以使用 Access VBA 中的DoCmd.TransferText。它可以为您创建 Access 表并将 CSV 数据保存在该表中。 msdn.microsoft.com/en-us/library/office/…
  • 非常感谢您的 cmets Tarik、TKEyi60 和 HansUp。我正在使用 excel VBA,因为我想在启用宏的 Excel 文件中创建一个用户界面,该文件的目的是成为金融工具的自定义数据库。我还想拥有使用 Access 和 SQL 的所有查询能力。我想我做的结构都错了。也许我应该根据我实际想要完成的任务提出一个一般性问题?供参考。我刚在一家银行找到一份学生工作,他们使用 Excel VBA 并希望我在这种情况下熟悉 SQL。

标签: sql excel vba ms-access


【解决方案1】:

将 CSV 导入 Access 的最简单方法是在 Access 应用程序会话中使用 DoCmd.TransferText

但您想使用 Excel VBA。在这种情况下,如果您的 MS Office 安装包含 Access (MSACCESS.EXE),您可以使用 Excel VBA 自动执行 Access,并且仍然使用 DoCmd.TransferText 轻松导入 CSV。

我在 Excel 2007 中测试了这个模块。它创建了 GSPC 表并将来自 table.csv 的数据存储在该表中。如果表已经存在,TransferText 将简单地附加 CSV 数据。您可以在运行TransferText 之前执行DELETE FROM GSPC,这样表格将只包含最新的CSV 数据。

考虑到你说你是菜鸟,这可能看起来有点吓人。但是,以下大部分内容是我添加的用于指导您的 cmets。该过程的实际“胆量”相当简短。

Option Explicit

Public Sub ImportCsvToAccess()
    Const cstrCsvFile As String = "table.csv"
    Const cstrDbFile As String = "tblImport.accdb"
    Const cstrTable As String = "GSPC"
    Dim strFolder As String

    '* early binding *'
    ' requires reference to Microsoft Access <version> Object Library
    'Dim objAccess As Access.Application
    'Set objAccess = New Access.Application

    '* late binding *'
    ' no reference required
    Dim objAccess As Object
    Set objAccess = CreateObject("Access.Application")

    ' this is useful during development
    ' in production, you may prefer to hide it (Visible = False)
    objAccess.Visible = True

    strFolder = ActiveWorkbook.Path & Chr(92)
    'Debug.Print strFolder
    objAccess.OpenCurrentDatabase strFolder & cstrDbFile, _
        Exclusive:=True

    '* early binding *'
    'objAccess.DoCmd.TransferText _
    '    TransferType:=acImportDelim, _
    '    TableName:=cstrTable, _
    '    Filename:=strFolder & cstrCsvFile, _
    '    HasFieldNames:=True

    '* late binding *'
    ' acImportDelim = 0
    objAccess.DoCmd.TransferText _
        TransferType:=0, _
        TableName:=cstrTable, _
        Filename:=strFolder & cstrCsvFile, _
        HasFieldNames:=True

    objAccess.Quit
    Set objAccess = Nothing
End Sub

【讨论】:

  • 早期绑定在开发过程中很有用,因为它可以为您提供 Intellisense 和类型检查。后期绑定生产意味着您可以放弃引用以避免不同 Office 版本的部署麻烦。但如果您愿意,您可以对两者进行早期绑定。
  • 这是一个很好的解决方案。它比我所希望的更快更好。也感谢您的 cmets。谢谢 HansUp。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2011-03-28
  • 2017-07-25
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多