2016-12-28 566 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,所以我不能帮助你进行调试 –