VBA ActiveWorkbook.Saveas运行时错误1004
我是VBA新手,试图从ws复制到wscsv,并将后者保存为.csv文件。 以下是我的子例程。
我遇到:
运行时错误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
解决你的错误行,只需使用:
ActiveWorkbook.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=2
( ConflictResolution = 2
,等于xlLocalSessionChanges
,请阅读: https : xlLocalSessionChanges
但是,您可以通过不使用ws.Activate
, ActiveWorkbook
和csvworkbook = ActiveWorkbook.Name
来改进代码。 您可以直接将您的wscsv
(定义为工作簿)分配给新创build的工作簿。 看看我的代码如何引用所有对象。
码
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
ActiveWorkbook.SaveAs Filename:=savedirectory, FileFormat:=xlCSV, ConflictResolution:=xlLocalSessionChanges
你可以试试这个方法吗? 它为我工作。