如何通过VBA将一个月的csv文件(日期命名)导入Excel?
我需要将一个月的CSV文件加载到Excel中,以便通过VBA进行分析。每月的每一天都是一个单独的文件,文件名为YYYYMMDD如何通过VBA将一个月的csv文件(日期命名)导入Excel?,excel,csv,ado,import-from-csv,vba,Excel,Csv,Ado,Import From Csv,Vba,我需要将一个月的CSV文件加载到Excel中,以便通过VBA进行分析。每月的每一天都是一个单独的文件,文件名为YYYYMMDD Sub Month_wdata_import() Set cN = CreateObject("ADODB.Connection") Set rS = CreateObject("ADODB.Recordset") Dim sDate As String Dim sDataPath As String Dim i As Integer Dim mMax As In
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
目前,我可以加载由两种不同情况创建的两个文件,A和B使用
With ActiveSheet.QueryTables.Add(Connection:=Full_F_Name_A, _
Destination:=Range("$H$4"))
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
我使用循环来更改a和B(以及目的地)。我还没有弄清楚如何增加日期。我使用一个输入框来获取当月第一个文件的日期
F_Name = InputBox("Enter name of first data file eg YYYYMMDD, target=H4, EG4")
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
任何帮助都将是伟大的,因为我被卡住了…而且是一个初学者
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
好的,请参见下面的VBA代码。收到的运行时错误“3001”参数类型错误、超出可接受范围或相互冲突。调试器指向“.cursorlocation=aduseclient”行。也许我的电脑上少了一些软件。ADO网站上的介绍视频已经不存在了,所以我没有看到介绍。我会尝试我知道的另一种方式,打开文件并将其转储到excel中,同时等待进一步的建议
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
您是否考虑过使用ADODB和ODBC文本文件驱动程序/Jet 4.0将数据检索到记录集中,然后将其转储到工作表中:
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
dim cN as new adodb.connection
dim rS as new adodb.recordset
dim sDate as string
dim sDataPath as string
sDataPath="C:\Data"
sdate=date ' maybe loop through date arrary, or list of dates in sheet?
with cN
.CursorLocation = 3 ' adUseClient
.CursorType = 3 ' adopenstatic
.LockType = 1 ' adLockReadOnly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
end with
with RS
.ActiveConnection = cN
.Source = "select * from data_" & sdate & "_.csv"
.open
end with
range("A1").copyfromrecordset rs
因此,将您的csv文件放在变量sDataPath
定义的路径中,设置日期变量sDate
(可能在循环中)并开始测试
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
有关此类型pf技术的更多信息,请参阅Scripting Clinic(在过去的好日子里)的原始MSDN文章:
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
另外,你可以使用谷歌在网上发布大量的信息:)好的,我正在为我自己的问题提供答案……我将努力获取建议方法的程序
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
以下是正在工作的代码(仅限重要位):
Sub Month_wdata_import()
Set cN = CreateObject("ADODB.Connection")
Set rS = CreateObject("ADODB.Recordset")
Dim sDate As String
Dim sDataPath As String
Dim i As Integer
Dim mMax As Integer
sDataPath = Worksheets("D&L").Cells(1, "G").Value ' values located in 2nd sheet of workbook
mMax = Worksheets("D&L").Cells(1, "D").Value 'values located in 2nd sheet of workbook
For i = 1 To mMax
sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) ' looping through list of dates in sheet
With cN
.cursorlocation = aduseclient
.CursorType = adopenstatic
.LockType = adLockreadonly
.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDataPath & ";" & _
"Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
End With
With rS
.ActiveConnection = cN
.Source = "select * from data_" & sDate & "_.csv"
.Open
End With
Next
Range("A1").CopyFromRecordset rS
End Sub
把各种东西都调暗
'获取感兴趣的年份和月份[用户输入他们希望数据分析的年份和月份YYYYMM
YY_MM=输入框(“输入您要分析的每日周期的年和月,例如YYYYMM、无日、A_uuu、B_u或u TC needed”,target=D4,AI4)
'将YYYYMM日期分隔为YYYY和MM
F_年=左(YY_-MM,Len(YY_-MM)-2)
F_月=右(YY_-MM,Len(YY_-MM)-4)
“确定月内的天数”下面的代码来自http://msdn.microsoft.com/en-us/library/aa227538(v=vs.60).它把我从地狱的假想窝中救了出来
mMax=日期序列(CInt(F_年),(CInt(F_月)+1),1)-日期序列(CInt(F_年),CInt(F_月),1)
'用户必须通过在工作表上列出路径来说明数据所在的位置。在这种情况下,它是一个集合模板
sDataPath=工作表(“数据”)。单元格(1,4)。值位于工作簿的第一页
对于i=1到mMax'确定,这是A的文件插入
数据文件集
如果i<10,则需要添加一个零以获得正确的文件名
Z_singdig=“0”+CStr(一)
其他的
Z_singdig=CStr(一)
如果结束
sDate=“A_“+YY_MM+Z_singdig+”.csv“”循环浏览日期列表。。
'使用多个文件名标记数据列,以便读取
标签名称=sDate+“…………”
F_name=sDataPath+sDate
使用ActiveSheet.QueryTables.Add(连接:=“文本;”+F_名称,目标:=范围(“D1048576”).End(xlUp).Offset(1,0))”在第一个文件的底部插入下一个文件
.Name=标签名称
.FieldNames=True
.rowNumber=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.refreshinfoleopen=False
.RefreshStyle=xlInsertEntierRows
.SavePassword=False
.SaveData=True
.AdjustColumnWidth=False
.RefreshPeriod=0
.TextFilePromptOnRefresh=False
.TextFilePlatform=437
.TextFileStartRow=1
.TextFileParseType=xlDelimited
.textfilecommadelimitor=True
.TextFileColumnDataTypes=数组(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
.TextFileTrailingMinusNumbers=True
.Refresh BackgroundQuery:=False
以
'报告每个数据文件中的行数,以便以后我可以将其用作单元格引用
numorrows=Application.CountA(范围(“D:D”))
rownumout=numorrows-Corrtrow“上一个文件刚刚添加的行数”
rowprtinc=30+i
Numrowprt=“'data'!”+“DE”+CStr(rowprtinc)
Range(Numrowprt)=rownumout'将行数居中到表2中
Corrtrow=numorrows'必须跟踪当前行数,以便可以更正下一行数…是的,这很有效
接下来我
'对B组数据文件执行相同操作..此处未显示
端接头
您希望所有csv都在一个选项卡上还是各自在自己的选项卡上?各自在自己的选项卡上,谢谢!好的,我会检查这个。很抱歉延迟尝试。请参见上面的新代码。它不起作用。我想我需要下载一些内容…user2762824:是否有错误,它在哪里停止工作?它在.cursorlocation=secadulientdo处停止是否已安装MSADO 2.8?请从运行MDAC.exe