我希望能够获取一个像 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 回答