2016-12-28 569 views
1

我是VBA新手,嘗試從ws複製到wscsv並將後者另存爲.csv文件。以下是我的子例程。VBA ActiveWorkbook.Saveas運行時錯誤1004

我遇到:

運行時錯誤1004:應用程序未定義

在這一行:

ActiveWorkbook.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges 

csvworkbook = ActiveWorkbook.Name 

我的代碼

Sub AddNewWorkbook1(ws As Worksheet) 

    ws.Activate 
    MsgBox ("adding new workbook for" & ws.Name) 
    Dim wscsv As Excel.Workbook 
    Dim savedirectory As String 
    Dim currentworkbook As String 
    Dim csvworkbook As String 
    currentworkbook = ws.Name 

    savedirectory = '/Users/Desktop/Magnum/' & currentworkbook 

    Dim lrow As Long 
    lrow = Columns("A").End(xlDown).Row 

    Workbooks.Add 
    DisplayAlerts = False 
    ActiveWorkbook.SaveAs (Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges) 

    csvworkbook = ActiveWorkbook.Name 

    Set wscsv = ActiveWorkbook 
    MsgBox ("Entering copying") 

    ws.Range(ws.Cells(2, 1), ws.Cells(lrow, 4)).Copy 
    wscsv.Sheets(1).Range("A1").PasteSpecial xlPasteValues 
    ws.Range(ws.Cells(2, "H"), ws.Cells(lrow, "H")).Copy 
    wscsv.Sheets(1).Range("E1").PasteSpecial xlPasteValues 
    ws.Range(ws.Cells(2, "E"), ws.Cells(lrow, "E")).Copy 
    wscsv.Sheets(1).Range("F1").PasteSpecial xlPasteValues 
    ws.Range(ws.Cells(2, "I"), ws.Cells(lrow, "I")).Copy 
    wscsv.Sheets(1).Range("G1").PasteSpecial xlPasteValues 
    lrow = wscsv.Sheets(1).Columns("A").End(xlDown).Row 
    wscsv.Sheets(1).Range(wscsv.Sheets(1).Cells(2, 1), wscsv.Sheets(1).Cells(lrow, 1)).NumberFormat = "mm/dd/yyyy" 
    wscsv.Sheets(1).Range("A1").Value = "Date" 
    wscsv.Sheets(1).Range("B1").Value = "open" 
    wscsv.Sheets(1).Range("C1").Value = "high" 
    wscsv.Sheets(1).Range("D1").Value = "low" 
    wscsv.Sheets(1).Range("E1").Value = "close" 
    wscsv.Sheets(1).Range("F1").Value = "volume" 
    wscsv.Sheets(1).Range("G1").Value = "cap" 
    wscsv.Save 
    wscsv.Close 

    MsgBox ("Copying complete") 

    End Sub 
+0

是'currentworkbook'一個'CSV'? http://stackoverflow.com/questions/17173898/how-to-do-a-save-as-in-vba-code-saving-my-current-excel-workbook-with-datesta – scorpion

+0

沒有它沒有。它是一個.xlsx。 –

回答

0
ActiveWorkbook.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=xlLocalSessionChanges 

你可以試試這種方式嗎?它爲我工作。

+0

不,還是不行,是否因爲我使用Mac來運行? –

1

解決您的錯誤路線,只需使用:

ActiveWorkbook.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=2 

ConflictResolution = 2,等於xlLocalSessionChanges,讀到這裏:https://msdn.microsoft.com/en-us/library/office/ff194803.aspx

但是,您可以通過不使用ws.ActivateActiveWorkbookcsvworkbook = ActiveWorkbook.Name改善你的代碼。可以直接將wscsv(定義爲工作簿)分配給新創建的工作簿。請參閱我的代碼以下如何引用所有對象。

代碼

Option Explicit 

Sub AddNewWorkbook1(ws As Worksheet) 

MsgBox ("adding new workbook for " & ws.Name) 

Dim wscsv As Workbook 
Dim savedirectory As String 
Dim currentworkbook As String 
Dim csvworkbook As String 

currentworkbook = ws.Name 
savedirectory = "Your Path" & "\" & ws.Name 

Dim lrow As Long 
lrow = ws.Columns("A").End(xlDown).Row 

Set wscsv = Workbooks.Add 
DisplayAlerts = False 

wscsv.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=2 
csvworkbook = wscsv.Name 

MsgBox ("Entering copying") 

' do the rest of your copy >> paste 

End Sub 
+0

謝謝!但它仍然不起作用,並給出相同的錯誤。我在MacBook Air上運行它。是否有可能成爲原因? –

+0

它。可能會,但我有一臺PC,所以我不能幫助你進行調試 –