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