使用Access VBA将多个csv组合到单个xlsx

时间:2014-08-27 18:35:08

标签: excel vba ms-access csv xlsx

我在尝试将不同的csv文件合并为一个单独的xslx工作簿文件作为MS Access中的单独工作表时遇到了问题。我查找的很多东西都是excel,但我需要能够在Access中使用它。我在excel vba中找到的代码,我试图在表单中使用它通常会给我带来错误,大部分时间都是"对象的方法' _Global'失败",即使我引用excel库,以及添加Excel。所有必要对象的前缀,例如工作簿和工作表。

编辑:

这是我尝试使用的示例代码,用于执行从csv到xslx的转换

 Dim CSVfolder As String
 Dim XlsFolder As String
 Dim fname As String
 Dim wBook As Excel.Workbook

 CSVfolder = "C:\test\"
 XlsFolder = "C:\test\"

 fname = Dir(CSVfolder & "*.csv")

 Do While fname <> ""
 Set wBook = Excel.Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:=",")
 wBook.SaveAs XlsFolder & Replace(fname, ".csv", ""), FileFormatNum = 51
 wBook.Close False
 fname = Dir
 Loop

具体地说,错误会在SaveAs行中被捕获,这次是说&#39; SaveAs&#39;对象&#39; _Workbook&#39;失败。

3 个答案:

答案 0 :(得分:1)

我想您想使用Access vba将多个csv文件合并到一个主Excel文件中? 如果是这样,首先要在脑海中制定计划如何实现这一目标。

伪将是:

  1. 在文件夹中搜索csv文件
  2. 打开csv文件并将工作表/内容复制到主文件
  3. 保存主文件
  4. 执行上述步骤,直到不再有文件为止
  5. 代码中的

    将是:

    Private Sub Merge()
        'Create Excel application instance
        Dim xlApp As Object
        Set xlApp = CreateObject("Excel.Application")
    
        'Setup workbooks
        Dim wB As Excel.Workbook
        Dim wBM As Excel.Workbook
    
        'Csv files folder
        Dim CSVfolder As String
        CSVfolder = "C:\CsvFolder"
    
        'Master Excel file path
        Dim mF As String
        mF = Application.CurrentProject.path & "\Master.xlsx" 'Where your master file is
    
        'open the master file
        Set wBM = xlApp.Workbooks.Open(mF)
    
        'search and open the client files
        Dim fname As String
        fname = Dir(CSVfolder & "\*.csv")
        Do While fname <> ""
           'open the client file
           Set wB = xlApp.Workbooks.Open(CSVfolder & "\" & fname)
           'copy the first sheet from client file to master file
           wB.Sheets(1).Copy After:=wBM.Sheets(wBM.Sheets.count)
           'save master file
           wBM.Save
           'close client file
           wB.Close False
           'move to next client file
           fname = Dir()
        Loop
    
        xlApp.visible = True
        Set xlApp = Nothing
    End Sub
    

    请考虑在最终代码中捕获错误。 希望这有帮助。

答案 1 :(得分:0)

如果你想在Access中使用它,那很简单。 Access具有所谓的链接表。这些表不在Access中,但保留在已存在的任何地方/任何地方。 Access具有指向它的链接,您可以看到Access表的外观和行为 执行此操作的命令是:

DoCmd.TransferText acLinkDelim, , "tblTemp", "MyFile.csv", True

你还想创建一个看起来像这样的查询(我们称之为qryMaster)

INSERT INTO tblMaster SELECT * FROM tblTemp

这是代码

Sub ImportCSV()
    Dim fname As String
    Dim CSVfolder As String
    CSVfolder = "C:\test\"
    fname = Dir(CSVfolder & "*.csv")

    Do While fname <> ""
        DoCmd.TransferText acLinkDelim, , "temp", fname, True
        CurrentDb.Execute ("qryMaster")
    Loop
    DoCmd.DeleteObject acTable, "tblTemp"
End Sub

在运行此之前,您必须创建tblmaster。最简单的方法是手动导入1个文件。

答案 2 :(得分:0)

如果您要使用正确的文件扩展名替换文件扩展名,则无需替换文件扩展名。我没有查找,但我假设51是* .xlsx文件。

 wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xlsx"), FileFormatNum = 51

顺便说一句,你应该使用命名常量而不是幻数。