excel - 如何通过 VBA 将一个月的 csv 文件(命名日期)导入 Excel?

标签 excel csv ado import-from-csv vba

我需要将一个月的 CSV 文件加载到 Excel 中,以便通过 VBA 进行分析。每月的每一天都是一个带有日期名称 (YYYYMMDD) 的单独文件。

目前,我可以加载由两种不同情况创建的两个文件,A 和 B 使用

With ActiveSheet.QueryTables.Add(Connection:=Full_F_Name_A, _
                                 Destination:=Range("$H$4"))

我使用循环来更改 A 和 B(以及目的地)。我还没有弄清楚如何增加日期。我使用输入框来获取当月第一个文件的日期。
F_Name = InputBox("Enter name of first data file eg YYYYMMDD, target=H4, EG4")

任何帮助都会很棒,因为我被卡住了......而且是初学者。

OK OK,请看下面的 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

最佳答案

你考虑过使用 多宝 ODBC 文本文件驱动程序/Jet 4.0 将数据检索到记录集中,然后将它们转储到工作表中:

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 (可能在一个循环中)并开始测试!

有关这种类型 pf 技术的更多信息,这里是 Scripting Clinic 的原始 MSDN 文章(在过去的美好时光):

MSDN: Much ADO about Text Files

此外,您还可以使用 Google 在网络上获取大量信息:)

关于excel - 如何通过 VBA 将一个月的 csv 文件(命名日期)导入 Excel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707320/

相关文章:

java - Apache POI MissingCellPolicy 不适用于 Excel 读写操作

Excel Countif - 使用没有帮助行的函数解析参数

Python,嵌套for循环

python - 读取 .xlsx 并访问单元格值,但不按其位置

vba - 优化 VBA Excel 中双循环的性能

python - 使用 pandas 根据 csv 中另一列中的条件更新一列中的值

ios - 处理 CSV 文件

database - 经典 ASP - 使用 Windows 身份验证的 SQL Server 2008 连接字符串

delphi - 取消后重用 ADOQuery

excel - 使用 ADO 将 Excel 电子表格导入数组的更快方法