【问题标题】:csv output from excel error but other data types work correctly?csv 输出来自 excel 错误,但其他数据类型工作正常?
【发布时间】:2014-06-18 18:22:42
【问题描述】:

好的,我正在尝试编写一个将 Excel 工作簿保存到 csv 文件中的宏。我尝试了许多不同的解决方案,但我仍然无法正确打印这些值。当我打开它产生的文件时。我遗漏的其余代码是获取原始电子表格并将内容复制到临时工作表中,这样我就可以从同一个 WB 中获取多张工作表并将它们打印到同一个 csv 文件中。它还有一个模块可以清除该临时文件的所有格式和内容。我运行代码只是将它打印到一个新的 excel 电子表格,它工作正常只是不会打印到 csv 不知道为什么

输出如下:

K     ! bîh^     [Content_Types].xml ¢(
[… skip a bunch of binary lines …]
KÆ8k¡~¥-ÙÔäá ûÜ

我的代码如下所示:

Sub SaveFile()
Dim NewName As String
Dim nm As Name
Dim ws As Worksheet

If MsgBox("Copy specific sheets to a new workbook" & vbCr & _
"New sheets will be pasted as values, named ranges removed" _
, vbYesNo, "NewCopy") = vbNo Then Exit Sub

With Application
    .ScreenUpdating = False

     '       Copy specific sheets
     '       *SET THE SHEET NAMES TO COPY BELOW*
     '       Array("Sheet Name", "Another sheet name", "And Another"))
     '       Sheet names go inside quotes, seperated by commas
    On Error GoTo ErrCatcher
    Sheets(Array("Raw Data Copy")).copy
    On Error GoTo 0

     '       Paste sheets as values
     '       Remove External Links, Hperlinks and hard-code formulas
     '       Make sure A1 is selected on all sheets
    For Each ws In ActiveWorkbook.Worksheets
        ws.Cells.copy
        ws.[A1].PasteSpecial Paste:=xlValues
        ws.Cells.Hyperlinks.Delete
        Application.CutCopyMode = False
        Cells(1, 1).Select
        ws.Activate
    Next ws
    Cells(1, 1).Select

     '       Remove named ranges
    For Each nm In ActiveWorkbook.Names
        nm.Delete
    Next nm

     '       Input box to name new file
    NewName = "test"

     '       Save it with the NewName and in the same directory as original
    ActiveWorkbook.SaveCopyAs ThisWorkbook.path & "\" & NewName & ".csv"
    ActiveWorkbook.Close SaveChanges:=False

    .ScreenUpdating = True
End With
Exit Sub

ErrCatcher:
MsgBox "Specified sheets do not exist within this workbook"
End Sub

【问题讨论】:

    标签: excel vba export-to-csv


    【解决方案1】:

    SaveCopyAs 仅以 Excel 格式保存 Excel 工作簿。即使您将 .csv 附加到文件名,该文件仍然是 .xls 格式的文件。

    Workbook SaveAs 方法可让您指定要保存到的文件类型。

    但是,如果您使用 SaveAs 方法,它会更改您当前文件的名称。

    Stack Overflow 上的这个较早的问题有一些关于如何使用 SaveAs 方法而不更改您正在处理的文件的名称的选项。

    Why does VBA ActiveWorkbook.SaveAs change the open spreadsheet? 有一些关于如何正确使用 SaveAs 方法以及在此过程中不更改当前文件名称的方法。

    【讨论】:

    • 如果我使用 SaveAs 方法,我可以将位置保存到 etl 服务器还是必须是本地的?
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2018-03-27
    • 2015-03-25
    相关资源
    最近更新 更多