我在尝试将不同的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;失败。
答案 0 :(得分:1)
我想您想使用Access vba将多个csv文件合并到一个主Excel文件中? 如果是这样,首先要在脑海中制定计划如何实现这一目标。
伪将是:
将是:
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
顺便说一句,你应该使用命名常量而不是幻数。