CSV使用Excel VBA在MS Access数据库内的表格中
我希望能够像这个http://ichart.yahoo.com/table.csv?s=^GSPC这样的csv文件,它将位于工作簿文件夹,并作为一个名为GSPC的表内已经存在的空白MS Access数据库。 空白数据库文件将位于相同的文件夹中,并命名为tblImport.accdb。 我看了很多论坛主题,发现没有像我这样的noob简单。 我很高兴有任何帮助。
将CSV导入Access的最简单方法是使用Access应用程序会话中的DoCmd.TransferText 。
但是你想使用Excel VBA。 在这种情况下,如果您的MS Office安装包含Access(MSACCESS.EXE),则可以使用Excel VBA自动执行Access,并仍然使用DoCmd.TransferText
轻松导入CSV。
我在Excel 2007中testing了这个模块。它创build了GSPC
表,并将table.csv
中的数据存储在该表中。 如果该表已经存在,则TransferText
将简单地附加CSV数据。 在运行TransferText
之前,您可以执行DELETE FROM GSPC
,这样表格将只包含最新的CSV数据。
这可能看起来有点恐吓,考虑到你说你是一个noob。 然而,下面的大部分内容都是我为了引导你而添加的。 该程序的实际“胆量”相当短暂和简单。
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