2013-04-17 13 views
3

Я новичок в Excel. Мне нужно создать новое excel из написанного макроса и добавить некоторые данные и сохранить его как файл csv. Я получаю Application defined или Object defined error. Ее это кодОпределенная заявка или ошибка определения объекта в excel vba

Sub splitIntoCsv() 
Dim wbIn 
Dim wbIn1 As Workbook 
Dim header As Variant 
Set wbIn = CreateObject("Excel.Application") 
wbIn.Workbooks.Add 
'wbIn.Worksheets(1).Name = "TestData" 
'Set wbIn1 = Workbooks.Open(Sheet1.Range("b25").Value, True, False) 
header = Split(ThisWorkbook.Sheets(1).Range("B2").Value, ",") 
For k = 1 To 10 
DoEvents 
Next k 
For i = LBound(header) To UBound(header) 
'MsgBox header(i) 
**wbIn.Worksheets(1).Range("a" & i).Value = header(i)** 
Next i 
wbIn.Worksheets(1).SaveAs Filename:="D:\file.csv" & Filename, FileFormat:=xlCSV, CreateBackup:=False 
End Sub 

я получил ошибку в Помеченные lines.Help необходимо, Спасибо заранее, Raghu.

ответ

1

Следующий код теперь работает, пожалуйста, посмотрите

Sub splitIntoCsv() 
Dim wbIn As Excel.Application 
Dim wbIn1 As Workbook 
Dim header As Variant 

Set wbIn = CreateObject("Excel.Application") 
Set wbIn1 = wbIn.Workbooks.Add 

header = Split(ThisWorkbook.Sheets(1).Range("B2").Value, ",") 
For k = 1 To 10 
DoEvents 
Next k 
For i = LBound(header) To UBound(header) 
'**wbIn1.Worksheets(1).Range("a" & i).Value = header(i)** 
Next i 

wbIn1.SaveAs Filename:="D:\file.csv" & Filename, FileFormat:=xlCSV, CreateBackup:=False 
wbIn1.Close 
Set wbIn1 = Nothing 
wbIn.Application.Quit 
Set wbIn = Nothing 
End Sub 

Первая проблема в коде было то, что вы пытались сохранить с помощью электронных таблиц. Рабочие листы не имеют метода сохранения, книги работают.

При фиксации кода у меня было большое количество объектов excel в памяти. Пожалуйста, посмотрите, как закрыть и выйти из приложения excel.

+0

Спасибо за ваше предложение. –

1

Для выделенной линии, о которой вы спрашивали, обратите внимание, что функция Split возвращает нулевой массив, поэтому в первый раз через цикл вы пытаетесь обратиться к ячейке A0. Итак, измените линию на:

wbIn.Worksheets(1).Range("a" & i+1).Value = header(i) 
+0

Спасибо за ваш ответ. –

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