通过MS Acces的vba将CSV文件从一个文件夹合并为一个文件

时间:2018-07-30 11:41:04

标签: excel vba excel-vba csv ms-access

您好,所以我完成了程序部分,该部分计算并导出带有结果的csv。 (最终约有1600个csv文件),每个文件只有1列,介于20到0行之间。我希望我的MS Access VBA程序将它们结合在一起成为一个更大的CSV。因此,相同的标头仅在新文件的顶部一次。

到目前为止,我拥有的程序似乎在尝试导入Reg的那部分掉了。文件号。

Dim db As DAO.Database
Set db = CurrentDb
MTH = Format(Date, "mmm")
UserInput = InputBox("Enter Country Code")
Dim strSourcePath As String
Dim strDestPath As String
Dim strFile As String
Dim strData As String
Dim x As Variant
Dim Cnt As Long
Dim r As Long
Dim c As Long
Dim wks As Excel.Worksheet

    Application.Echo False

    'Change the path to the source folder accordingly
    strSourcePath = "Q:\CCNMACS\AWD" & CTRY

    If Right(strSourcePath, 1) <> "\" Then strSourcePath = strSourcePath & "\"

    'Change the path to the destination folder accordingly
    strDestPath = "Q:\CCNMACS\AWDFIN"

    If Right(strDestPath, 1) <> "\" Then strDestPath = strDestPath & "\"

    strFile = Dir(strSourcePath & "*.csv")

  Do While Len(strFile) > 0
        Cnt = Cnt + 1
        If Cnt = 1 Then
            r = 1
        Else
            r = Cells(Rows.Count, "A").End(xlUp).Row + 1
        End If
        Open strSourcePath & strFile For Input As #1
            If Cnt > 1 Then
                Line Input #1, strData
            End If
            Do Until EOF(1)
                Line Input #1, strData
                x = Split(strData, ",")
                For c = 0 To UBound(x)
                    wks.Cells(r, c + 1).Value = Trim(x(c)) 'Error is here: Run time error '91': Object variable or With Block variable not set
                Next c
                r = r + 1
            Loop
        Close #1
        Name strSourcePath & strFile As strDestPath & strFile
        strFile = Dir
    Loop

    Application.Echo True

    If Cnt = 0 Then _
        MsgBox "No CSV files were found...", vbExclamation

2 个答案:

答案 0 :(得分:5)

您的问题并不完全确定您要尝试的操作,但是如果我理解正确,您只需要在彼此的末尾附加几个文件,即可使“一个大CSV”

如果是这样,那么有多种方法可以比使用VBA轻松得多。 .CSV 文件只是纯文本文件,每个字段用逗号分隔,文件扩展名为.CSV

我个人会使用Notepad++(我想它可以执行此操作;它可以执行其他所有操作),或者甚至更容易,我会使用Windows 命令提示符


假设您有一个包含文件的文件夹:

File1.csv
File2.csv
File3.csv
...etc
  • 打开Windows命令提示符。 (一种方法是使用 Windows Key Windows键+ R ,然后键入cmd并按Enter。)

  • 使用cd(与ChDir相同)将目录更改为文件位置。
    (例如,您可以使用cd c:\users\myFolder, 然后按 Enter

  • 要将文件夹中的所有CSV合并为一个,可以使用如下命令:

    copy *.csv combinedfile.csv
    

就是这样!


已创建一个名为combinedfile.csv的文件。您可以在Excel或文本编辑器(如记事本)中打开以对其进行仔细检查并在必要时进行手动调整。

很显然,可以使用多种方法来更改命令,例如,如果只希望以单词File开头的文件,则可以使用:

copy file*.csv combinedFile.csv

img

答案 1 :(得分:0)

这应该做您想要的。

    int Np( int mn, list<int>a, int c )
{
    int size = a.size(), rst = 0, maxI = 0;
    std::list<int>::iterator it;
    while( size > c )
    {
        a.sort();
        maxI += a.back();
        a.pop_back();
        rst = 0;
        for( auto ele : a )
        {
           rst += ele;
            cout << rst << endl;
        }
        if( (rst - maxI) == mn or (maxI - rst) == mn or (maxI + rst) == mn )
        {
            return mn;
        }
        size--;
    }
   return rst; 
}

enter image description here

enter image description here

有关此主题的其他详细信息,请参见下面的链接。

https://anthonysmoak.com/2018/04/10/how-to-fix-an-import-specification-error-in-microsoft-access/

https://www.oakdome.com/programming/MSAccess_ExportSpecifications_TransferText_To_CSV.php