2013-08-04 51 views
2

我希望能够像这样一个http://ichart.yahoo.com/table.csv?s=^GSPC获取csv文件,这将是位于工作簿文件夹 中,并将其作为已存在的空白MS Access数据库中名为GSPC的表格。空白数据库文件将位于相同的文件夹中,并命名为tblImport.accdb。我看过很多论坛主题,发现对于像我这样的noob来说不够简单。我很乐意提供任何帮助。使用Excel VBA将CSV转换为MS Access数据库中的表格

+0

至少给它一个镜头和人都会有部分的激励来帮助你。 – Tarik

+1

如果您计划使用VBA,您需要查看SQL'Create'来创建一个表和http://stackoverflow.com/questions/9564908/open-csv-file-via-vba-performance来查看CSV可以打开。另外,如果您计划在处理数据之后再查看记录集。 – Grant

+2

我不明白你为什么想让Excel参与此事。如果您想使用VBA将CSV导入到Access中,则可以使用Access VBA中的“DoCmd.TransferText”。它可以为您创建Access表并将CSV数据保存在该表中。 http://msdn.microsoft.com/en-us/library/office/bb214141(v=office.12).aspx – HansUp

回答

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数据。您可以在运行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 
+2

早期绑定在开发过程中很有用,因为它为您提供智能感知和类型检查。对于生产的后期绑定意味着您可以放弃引用以避免使用不同的Office版本进行部署。但是如果你愿意,你可以为两者进行早期绑定。 – HansUp

+0

这是一个美丽的解决方案。它比我希望的更快,更好。谢谢你的评论。谢谢HansUp。 – steinbitur

相关问题