2

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

4

1 回答 1

2

将 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 数据。您可以DELETE FROM GSPC在运行前执行,TransferText这样该表将只包含最新的 CSV 数据。

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

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
于 2013-08-04T16:57:58.187 回答