要在excel vba中另存为CSV格式的文件

要在excel vba中另存为CSV格式的文件,excel,vba,csv,ms-word,powerpoint,Excel,Vba,Csv,Ms Word,Powerpoint,我使用以下代码将活动工作表保存为CSV,但在该文件夹中找不到输出文件。代码有什么问题 代码供您参考: Sub Save_CSV() Application.ScreenUpdating = False Application.DisplayAlerts = False SaveNAme = "INDENTED_BOM" SavePath = Dir("C:\Users\350153\Desktop\AUTOMATION (STRUCTURES)

我使用以下代码将活动工作表保存为CSV,但在该文件夹中找不到输出文件。代码有什么问题

代码供您参考:

    Sub Save_CSV()

      Application.ScreenUpdating = False
      Application.DisplayAlerts = False

    SaveNAme = "INDENTED_BOM"
    SavePath = Dir("C:\Users\350153\Desktop\AUTOMATION (STRUCTURES)")

    Range("A1:D150").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToLeft)).Select

    Selection.Copy

    Workbooks.Add
    With ActiveSheet.Range("A2")
    .PasteSpecial xlPasteValues
    .PasteSpecial xlPasteFormats
    End With

    ActiveSheet.Columns("A:D").AutoFit

    ActiveWorkbook.SaveAs Filename:=SavePath & SaveNAme & ".csv" _
        , FileFormat:=xlCSVWindows, CreateBackup:=False

    ActiveWorkbook.Save
    ActiveWindow.Close

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    MsgBox "Task Finished", vbInformation, "Finished"

   End Sub

无需复制/粘贴即可执行此操作,因为
工作表
对象具有
另存为
方法,因此无需执行以下操作:

  • 通过
    工作簿创建新工作簿。添加
  • 从当前工作簿复制单元格范围
  • 从(1)将复制的选择粘贴到新工作簿
  • 从(1)保存新工作簿
  • 相反,你应该:

  • 调用工作表上的
    SaveAs
    方法
  • 删除前一代码中未复制的行(1-4)
  • 它看起来像这样,也被修改以确保文件不存在。如果文件已经存在,则
    MsgBox
    会提醒您,然后过程将退出而不保存

    Sub SaveAs_CSV()
    Dim SaveNAme$、SavePath$、csvFullName$
    Application.ScreenUpdating=False
    Application.DisplayAlerts=False
    SaveNAme=范围(“B2”)
    保存路径=范围(“B3”)
    如果正确(SavePath,1)Application.PathSeparator,则SavePath=SavePath&Application.PathSeparator
    csvFullName=savePath&SaveNAme&“.csv”
    如果Dir(csvFullName)“,则
    '文件已存在,请通知用户并退出过程
    MsgBox csvFullname&“已存在!文件将不会另存为CSV。”,vbInformation
    去早退
    如果结束
    ActiveSheet.SaveAs文件名:=csvFullName_
    ,FileFormat:=xlCSVWindows,CreateBackup:=False
    行(“1:4”).EntireRow.Delete
    列(“A:D”)。自动拟合
    活动窗口,关闭
    提前退出:
    Application.ScreenUpdating=True
    Application.DisplayAlerts=True
    端接头
    
    无需复制/粘贴即可执行此操作,因为
    工作表
    对象具有
    另存为
    方法,因此无需执行以下操作:

  • 通过
    工作簿创建新工作簿。添加
  • 从当前工作簿复制单元格范围
  • 从(1)将复制的选择粘贴到新工作簿
  • 从(1)保存新工作簿
  • 相反,你应该:

  • 调用工作表上的
    SaveAs
    方法
  • 删除前一代码中未复制的行(1-4)
  • 它看起来像这样,也被修改以确保文件不存在。如果文件已经存在,则
    MsgBox
    会提醒您,然后过程将退出而不保存

    Sub SaveAs_CSV()
    Dim SaveNAme$、SavePath$、csvFullName$
    Application.ScreenUpdating=False
    Application.DisplayAlerts=False
    SaveNAme=范围(“B2”)
    保存路径=范围(“B3”)
    如果正确(SavePath,1)Application.PathSeparator,则SavePath=SavePath&Application.PathSeparator
    csvFullName=savePath&SaveNAme&“.csv”
    如果Dir(csvFullName)“,则
    '文件已存在,请通知用户并退出过程
    MsgBox csvFullname&“已存在!文件将不会另存为CSV。”,vbInformation
    去早退
    如果结束
    ActiveSheet.SaveAs文件名:=csvFullName_
    ,FileFormat:=xlCSVWindows,CreateBackup:=False
    行(“1:4”).EntireRow.Delete
    列(“A:D”)。自动拟合
    活动窗口,关闭
    提前退出:
    Application.ScreenUpdating=True
    Application.DisplayAlerts=True
    端接头
    
    寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。请使用单元格B2和B3的内容更新您的问题。B2将是我的文件名,B3是CSV文件必须保存的位置。截屏、在网站上发布图像、复制链接并将其集成到问题中是否真的更容易,只需直接复制和粘贴代码,这样我们就不必重新键入完整的代码了?这不是要求您的。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中复制所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。请使用单元格B2和B3的内容更新您的问题。B2将是我的文件名,B3是CSV文件必须保存的位置。截屏、在网站上发布图像、复制链接并将其集成到问题中是否真的更容易,只需直接复制和粘贴代码,这样我们就不必重新输入完整的代码了?这不是要求你的。
    Sub SaveAs_CSV()
    Dim SaveNAme$, SavePath$, csvFullName$
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
        SaveNAme = Range("B2")
        SavePath = Range("B3")
        If Right(SavePath,1) <> Application.PathSeparator Then SavePath = SavePath & Application.PathSeparator
    
        csvFullName = savePath & SaveNAme & ".csv"
    
        If Dir(csvFullName) <> "" Then
            'File already exists, alert the user and exit procedure
            MsgBox csvFullname & " already exists! The file will not be saved as CSV.", vbInformation
            GoTo EarlyExit
        End If
    
        ActiveSheet.SaveAs Filename:=csvFullName _
            , FileFormat:=xlCSVWindows, CreateBackup:=False
        Rows("1:4").EntireRow.Delete
        Columns("A:D").AutoFit
        ActiveWindow.Close
    
    EarlyExit:
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    End Sub