2013-10-09 4 views
8

Скажем, у меня есть функция, которая генерирует некоторые данные в ячейки в текущем листе, как:Экспорт данных в CSV - Excel VBA

Cells(1, "A").Value = ... 
Cells(2, "A").Value = ... 
Cells(3, "A").Value = ... 
Cells(4, "A").Value = ... 

Вместо существа текущего листа в текущей книге, я хочу создайте и загрузите его в файл csv, до пути ввода

Скажите C:\USERS\Documents\Sample.csv.

Я видел такие вещи, как

 ActiveWorkbook.SaveAs Filename:= _ 
"c:\MyFile.csv", FileFormat:=xlCSV _ 
, CreateBackup:=False 

Но это будет просто сохранить текущую рабочую книгу в другое место, но я не хочу, чтобы генерировать данные в текущем листе, а затем сохранить, а я хочу экспорт сразу? Я все равно могу это сделать. Может быть, сделать как ActiveWorkbook = //pathname, а затем активировать его?

+3

Сначала откройте новую книгу. Затем введите данные макроданных в новую книгу. Затем вы можете сохранить новую книгу как csv в выбранной вами папке с вашим именем выбора. Затем закройте новую книгу. –

+0

@ Gary'sStudent Я использую 'Workbooks.Add' для создания другой книги. Как мне активировать сейчас, чтобы убедиться, что им импортируется в него ... что-то вроде «NewWorkbook.Sheets (1) .Activate'? – Thatdude1

+2

Не используйте только workbooks.add ... используйте что-то вроде ... dim wb как workbook // Установите wb = workbooks.add // с wb ... –

ответ

12

Вы можете написать в CSV просто с помощью VBA. Примером может служить:

Sub WriteCSVFile() 

Dim My_filenumber As Integer 
Dim logSTR As String 

My_filenumber = FreeFile 

logSTR = logSTR & Cells(1, "A").Value & " , " 
logSTR = logSTR & Cells(2, "A").Value & " , " 
logSTR = logSTR & Cells(3, "A").Value & " , " 
logSTR = logSTR & Cells(4, "A").Value 

Open "C:\USERS\Documents\Sample.csv" For Append As #My_filenumber 
    Print #My_filenumber, logSTR 
Close #My_filenumber 

End Sub 
+0

The_Barman: Очень приятно и чисто! –

+5

Это решение не обрабатывает случаи, когда в ваших данных существуют пробелы, символы новой строки или запятые. Всегда используйте реальную функцию CSV, а не конкатенируйте свои собственные строки. – dataless

+10

dataless ... вместо того, чтобы намекать на лучшее решение и не добавлять на сайт ... пожалуйста, найдите время, чтобы опубликовать свое лучшее решение. Я всегда рад узнать. Может быть, постарайтесь не сбить других, скорее попробуйте помочь им. –

6

Используйте .Привести, чтобы сделать новую книгу целевого листа, а затем .saveas вновь созданную книгу как CSV. Отрегулируйте Pathname, чтобы настроить каталог, в котором вы хотите сохранить csv.

Pathname = "" & Thisworkbook.path & "YourName.csv" 
    Sheets("Sheet you want as CSV").Move 
    ActiveWorkbook.SaveAs Filename:=PathName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
0

Просто изменил код на @CharlieSmith к довольно простой и более удобный код, который будет конвертировать все листы в вашей книге к новым CSV файлов с именами с соответствующими именами листов.

Sub WriteCSVFile() 
Dim i As Integer 
Dim WS_Count As Integer 

WS_Count = ActiveWorkbook.Worksheets.Count 
For i = 1 To WS_Count 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Worksheets(i) 
    PathName = "" & ThisWorkbook.Path & "\" & ws.Name & ".csv" 
    ws.Copy 
    ActiveWorkbook.SaveAs Filename:=PathName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
Next i 

End Sub 

Надеется, что это помогает

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