将Excel拆分为单独的CSV文件-VBA宏

将Excel拆分为单独的CSV文件-VBA宏,vba,excel,csv,Vba,Excel,Csv,我见过一些类似这样的问题,但我对VBA了解不够,无法根据自己的需求定制代码。基本上,我有一个100000行的电子表格,我需要将电子表格拆分为2000行的文件,共50个CSV文件。但是,每个文件必须包含原始电子表格名称、姓氏、电子邮件等顶部的标题行。是否有人可以帮助我使用VBA宏来完成此操作?我忘了输入到目前为止的代码: Public Sub Split_2000_With_Column_Headings() Dim inputFile As String, inputWb As Workboo

我见过一些类似这样的问题,但我对VBA了解不够,无法根据自己的需求定制代码。基本上,我有一个100000行的电子表格,我需要将电子表格拆分为2000行的文件,共50个CSV文件。但是,每个文件必须包含原始电子表格名称、姓氏、电子邮件等顶部的标题行。是否有人可以帮助我使用VBA宏来完成此操作?我忘了输入到目前为止的代码:

Public Sub Split_2000_With_Column_Headings()

Dim inputFile As String, inputWb As Workbook
Dim lastRow As Long, row As Long, n As Long
Dim newCSV As Workbook

inputFile = "PATH GOES HERE"

Set inputWb = Workbooks.Open(inputFile)

With inputWb.Worksheets(1)
    lastRow = .Cells(Rows.Count, "A").End(xlUp).row

    Set newCSV = Workbooks.Add

    n = 0
    For row = 2 To lastRow Step 2000
        n = n + 1
        .Rows(1).EntireRow.Copy newCSV.Worksheets(1).Range("A1")
        .Rows(row & ":" & row + 2000 - 1).EntireRow.Copy newCSV.Worksheets(1).Range("A2")

        'Save in same folder as input workbook with .xlsx replaced by (n).csv
        newCSV.SaveAs Filename:=Replace(inputWb.FullName, ".xlsx", "(" & n & ").csv"), FileFormat:=xlCSV, CreateBackup:=False
    Next
End With

newCSV.Close saveChanges:=False
inputWb.Close saveChanges:=False
End Sub

对我来说,这似乎是它应该工作,但没有发生什么,当我运行它。有什么想法吗?注意:此处的路径被替换为文件的路径

有类似的需求,OP的解决方案有效,除了我将新CSV的打开和关闭放在循环中,以避免Excel崩溃:

    For row = 1 To lastRow Step 2000

        'add workbook inside the loop
        Set newCSV = Workbooks.Add

        n = n + 1

        .Rows(row & ":" & row + 2000 - 1).EntireRow.Copy newCSV.Worksheets(1).Range("A1")

        'save in same folder as input workbook with .xlsx replaced by (n).csv
        newCSV.SaveAs Filename:=Replace(inputWb.FullName, ".xlsx", "(" & n & ").csv"), FileFormat:=xlCSV, CreateBackup:=False

        'close workbook inside the loop
        newCSV.Close saveChanges:=False

    Next

很高兴能了解到您目前为止所做的工作,那么您能分享您当前的代码吗?我刚刚添加了它,很抱歉。好的,我解决了这个问题。我使用了错误的格式。但是,现在当我尝试运行脚本时,如果A列中的单元格中没有任何内容,它就会停止。知道为什么吗?代码对我来说运行良好,并产生预期的结果,而且我在代码中没有看到任何错误。我使用Excel 2010创建了一个Data.xlsx,其中包含3列和100000行。将上述代码复制到新工作簿,并将此处的路径替换为实际路径。代码完成后,我有50个新的csv文件,即Data1.csv到Data50.csv,每个文件中有2000条记录,标题在同一文件夹中。不知道为什么它不适合你?是否看到任何错误消息?您是根据列A lastrow=.CellsRows.Count、A.EndxlUp.row查找lastrow,因此如果列A为空,它显然不会进入循环,并且不会产生任何结果。