我已经研究了这个网上数周的代码,但仍无法找到我所需要的,因此任何帮助,将不胜感激:导入CSV,出口查询,删除查询然后重复
我需要:
1)导入“C:\ Documents”中的第一个CSV,并创建一个名为“Data”的表格,其中包含我已经创建的导入规格。
2)在(SELECT?)查询(体育=足球,事件=匹配赔率)中创建和导出一个名为“Match Odds 001”的excel二进制文件 然后我希望删除包含在查询表“数据”。
3)重复步骤2)具有不同的活动导出每个查询,以名称为“(事件)001”,则删除从表中查询数据的Excel二进制文件200倍。
4)所有查询运行并被删除后,表中的任何剩余数据将被导出到一个名为“Misc 001”的excel二进制文件,然后从表“数据”中删除该数据(或者甚至删除)
5)重复1)从“C:\ Documents”导入第二个CSV文件,并将查询导出到Excel名为“(Event)002”的二进制文件,以便不替换以前的文件。
这将继续下去,直到所有的CSV已导入和分裂。
由于有200个查询我宁愿在VBA代码来创建它们。
我刚开始在Access中使用VBA,迄今已发现代码将导入所有CSV文件的文件夹中,所以我希望能插入代码来创建,导出然后删除查询。
对vba编码所需的任何帮助都非常感谢。
。
。
UPDATE:随着大量的感谢迈克现在我有以下的代码,但一些小问题也浮出水面。
1)如何可以压缩数据库,以减少文件大小的“DoCmd.RunSQL‘DROP TABLE数据’”命令后? 我想重复导入500MB的CSV然后删除它们,所以在我导入并放下第一个然后导入第二个文件大小变成1GB并且正在增加。
2)在事件表中包含第二列以便我的SELECT查询成为WHERE事件=事件& Selection = Selection并将这两个字段组合起来以创建文件名?
3)用于创建查询和文件名的事件表有时包含文件名中不能使用的字符,例如“/”&“?”。可以轻松地删除这些文件以创建文件名,或者可以更好地向事件表添加更多列,该列将包含要使用的文件名(即事件和选择的组合,但删除了不允许的字符)
如果我可以解决这些问题,我将为我的需求提供完美的代码,再次向迈克提供所有功劳。
Sub ImportAndSplit()
Dim fileCounter As String
Dim rs As New ADODB.Recordset
Dim sql As String
Dim qdf As QueryDef
Dim file As String
Const strPath As String = "C:\Users\Robbie\Documents\Data\" 'Directory Path
Dim strFile As String 'Filename
Dim strFileList() As String 'File Array
Dim intFile As Integer 'File Number
strFile = Dir(strPath & "*.csv") 'Loop through the folder & build file list
While strFile <> ""
intFile = intFile + 1 'add files to the list
ReDim Preserve strFileList(1 To intFile)
strFileList(intFile) = strFile
strFile = Dir()
Wend
If intFile = 0 Then 'see if any files were found
MsgBox "No files found"
Exit Sub
End If
DoCmd.SetWarnings False
Set qdf = CurrentDb.QueryDefs("Export")
sql = "SELECT Event FROM Events"
rs.Open sql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
For intFile = 1 To UBound(strFileList) 'cycle through the list of files & import to Access creating a new table called Data
DoCmd.TransferText acImportDelim, "Data", "Data", strPath & strFileList(intFile)
fileCounter = Format(intFile, "000") 'format i so that when you use it in file names, the files sort intuitively
Do While Not rs.EOF
sql = "SELECT * FROM Data WHERE Event='" & rs!Event & "'" 'select the records to export and export them
file = "C:\Users\Robbie\Documents\Data Split\" & rs!Event & " " & fileCounter & ".xlsb" 'use the counter to distinguish between which csv your exporting from
qdf.sql = sql
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, qdf.Name, file
sql = "DELETE FROM Data WHERE Event='" & rs!Event & "'" 'delete the records from the source table
DoCmd.RunSQL sql
rs.MoveNext
Loop
rs.MoveFirst
'export remaining data
file = "C:\Users\Robbie\Documents\Data Split\Misc " & fileCounter & ".xlsb" 'use the counter to distinguish between which csv your exporting from
sql = "SELECT * FROM Data"
qdf.sql = sql
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, qdf.Name, file
'delete remaining data
'DoCmd.RunSQL "DELETE FROM Data"
'or delete the table
DoCmd.RunSQL "DROP TABLE Data"
Next
MsgBox UBound(strFileList) & " Files were Imported and Split"
rs.Close
DoCmd.SetWarnings True
End Sub
非常感谢你的帮助。我没有想过自动化查询创建,并且放弃了单独写出所有200个查询。我会尽快实施这个解决方案。再次感谢。 – user3119454
很高兴为您提供帮助。如果结果正确,请接受答案。 – Mike
我已经修改了代码,它运行良好,但2个问题已浮出水面,我还有一个问题。感谢您的帮助,如果您能再次得到帮助,请再次感谢。我已经更新了这个问题以反映当前的情况。 – user3119454