在 VBA 中将文件格式从 .xls 更改为 .csv

问题描述 投票:0回答:1

我试图将主 .csv 文件拆分为单独的文件,每个新文件都有标题,最多 500 行数据。完成此操作后,我的原始文件是 .csv,但输出文件都是 .xls。

要求:

  1. 原始文件 = .csv.
  2. 所有输出文件必须具有相同的标题。
  3. 所有输出文件最多必须有 500 行数据。
  4. 所有输出文件必须为 .csv 格式。
  5. 所有输出文件必须使用新的并发文件名保存,例如文件 1,文件 2.

我通过 excel 中的“开发人员”选项卡运行此代码,因为它是一个 csv 文件,所以我使用的是活动电子表格。

我认为错误与文件格式有关 -4143,但是当我更改它时,代码中断所以我不确定如何继续。

Sub alm()
 
Dim ACS As Range, Z As Long, New_WB As Workbook, _
Total_Columns As Long, Start_Row As Long, Stop_Row As Long, Copied_Range As Range
 
Dim Headers() As Variant
 
Set ACS = ActiveSheet.UsedRange
 
With ACS
 
    Headers = .Rows(1).Value
    Total_Columns = .Columns.Count
     
End With
 
Start_Row = 2
 
Do While Stop_Row <= ACS.Rows.Count
     
    Z = Z + 1
     
    If Z > 1 Then Start_Row = Stop_Row + 1
     
    Stop_Row = Start_Row + 499
     
    With ACS.Rows
        If Stop_Row > .Count Then Stop_Row = .Count
    End With
     
    With ACS
        Set Copied_Range = .Range(.Cells(Start_Row, 1), .Cells(Stop_Row, Total_Columns))
    End With
     
    Set New_WB = Workbooks.Add
     
    With New_WB
     
        With .Worksheets(1)
            .Cells(1, 1).Resize(1, Total_Columns) = Headers
            .Cells(2, 1).Resize(Copied_Range.Rows.Count, Total_Columns) = Copied_Range.Value
        End With
         
       .SaveAs ACS.Parent.Parent.Path & Application.PathSeparator & "file-" & Z & ".csv", FileFormat:=-4143
       .Close
        
    End With
     
    If Stop_Row = ACS.Rows.Count Then Exit Do
     
Loop
 
End Sub


当我运行这段代码并且所有其他要求都有效时,但是分离的文件保存为 .xml,而不是 .csv。

output of code

excel vba csv type-conversion
1个回答
0
投票

您正在使用

FileFormat:=-4143
,它是 xlWorkbookNormal。所以它以 .csv 扩展名保存为 excel 格式。使用 6 (xlCSV),而不是

© www.soinside.com 2019 - 2024. All rights reserved.