2017-04-07 133 views
1

我已經使用下面的代碼來保存我的活動工作表,但在該文件夾中找不到文件。供大家參考文件saveas CSV格式iin excel vba

代碼:

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" 

末次

+1

問題尋求幫助調試(「爲什麼不是這個代碼的工作?」)必須包括所期望的行爲,一個特定的問題或錯誤,並重現它在問題本身所需要的最短的代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。 – Jeeped

+0

請更新您的問題的單元格內容** B2 **和** B3 **。 –

+0

B2將是我的文件名,B3是CSV文件必須保存的位置。 –

回答

0

你可以做到這一點沒有複製/粘貼,因爲Worksheet對象有一個SaveAs方法,所以沒有必要做:

  1. 通過Workbooks.Add創建新的工作簿
  2. 從當前的單元格複製範圍工作簿
  3. 粘貼複製的選定在從(1)
  4. 保存從(1)

相反,新的工作簿中的新工作簿,您應該:

  1. 上調用的SaveAs方法工作表
  2. 刪除您不在前面的代碼中複製的行(1-4)

它看起來像這樣,也進行了修改,以確保文件不存在。如果文件已經存在,則MsgBox提醒您,然後程序將退出而不保存

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