从excel错误输出csv但其他数据类型是否正常工作?

时间:2014-06-18 18:22:42

标签: excel vba export-to-csv

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

out put看起来像这样:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

Why does VBA ActiveWorkbook.SaveAs change the open spreadsheet?对如何正确使用SaveAs方法有一些评论,并且在此过程中没有更改当前文件的名称。