2016-12-28 32 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.Activate, ActiveWorkbook и csvworkbook = 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

Это. Может быть, но у меня есть компьютер, поэтому я не могу помочь вам отлаживать –

 Смежные вопросы

  • Нет связанных вопросов^_^