2015-12-08 1 views
9

Я ценю есть много записей, как save individual excel sheets as csv и Export each sheet to a separate csv file - Но я хочу, чтобы сохранить одного листа в книге.VBA Сохранение один лист в формате CSV (не вся рабочая книга)

Мой код в моем файле xlsm имеет параметры и лист данных. Я создаю копию листа данных со вставленными значениями, а затем хочу сохранить ее как csv. В настоящее время вся моя книга изменяет имя и становится csv.

Как «сохранить как csv» один лист в книге Excel?

Есть ли Worksheet.SaveAs или мне нужно переместить лист данных в другую книгу и сохранить его таким образом?

КОД ОБРАЗЦА

' [Sample so some DIMs and parameters passed in left out] 
Dim s1 as Worksheet 
Dim s2 as Worksheet 

Set s1 = ThisWorkbook.Sheets(strSourceSheet) 
' copy across 
s1.Range(s1.Cells(1, 1), s1.Cells(lastrow, lastcol)).Copy 

' Create new empty worksheet for holding values 
Set s2 = Worksheets.Add 

s2.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 

' save sheet 
s2.Activate 
strFullname = strPath & strFilename 


' >>> BIT THAT NEEDS FIXIN' 
s2.SaveAs Filename:=strFullname, _ 
    FileFormat:=xlCSV, CreateBackup:=True 

' Can I do Worksheets.SaveAs? 

Использование Windows 10 и Office 365

+0

Если вы используете метод Worksheet.Copy, без установки вставки назначения, Excel откроет его в новую книгу, содержащую только этот лист. После Worksheet.Copy вы можете просто использовать ActiveWorkbook, так как книга скопированных листов становится активной книгой, а оттуда сохраняет ее как новый CSV-файл. – Alex4336

+0

Amazing - 2500 просмотров и ни одного голоса ... – micstr

ответ

9

Этот код отлично подходит для меня.

Sub test() 

Application.DisplayAlerts = False 

ThisWorkbook.Sheets(strSourceSheet).Copy 
ActiveWorkbook.SaveAs Filename:=strFullname, FileFormat:=xlCSV, CreateBackup:=True 
ActiveWorkbook.Close 

Application.DisplayAlerts = True 

End Sub 

Это делает копию всего strSourceSheet листа, который открывает новую книгу, которую мы можем сохранить в виде файла .csv, то он закрывает вновь сохраненный файл в формате CSV, не портя имя файла на ваш исходный файл.

+0

Спасибо @ Alex4336 Я добавил к концу ' ActiveWorkbook.Close SaveChanges:. = False' _ # и удалить временную таблицу в xlsm_ 's2.Delete' – micstr

+0

Это был просто быстрый проект, так что не стесняйтесь использовать его, как вам нравится :) Этот код не нужно удалять s2, так как он не будет создавать s2. – Alex4336

+0

Отличный ответ, Алекс. Команда копирования создает новую книгу под названием «Book1.xlsx» с только скопированным листом. Эта новая книга становится ActiveWorkbook. После ее закрытия ActiveWorkbook снова становится вашей исходной рабочей книгой с кодом, которая все еще остается открытой и без изменений. –

1

Вам просто нужно сохранить книгу в виде файла CSV. В Excel появится диалоговое предупреждение о том, что вы сохраняете на один лист, но вы можете подавить предупреждение с помощью Application.DisplayAlerts = False.

Не забудьте вернуть его обратно к истине.

+0

ActiveWorkbook.SaveAs .... например. – PaulG

+0

Спасибо @PaulG. Я привык получать это приглашение, когда делаю это вручную в Excel, но код переименовывает мой файл без приглашения, которое было странным. – micstr

+0

ActiveWorkbook.SaveAs ... сохраняет лист (с подсказкой о том, что файл будет перезаписан), но он также переименовывает мой файл материнства xlsm в имя файла csv в корневом каталоге! Так что я все еще застрял – micstr

0

Это довольно общий

Sub WriteCSVs() 

Dim mySheet As Worksheet 
Dim myPath As String 

'Application.DisplayAlerts = False 

For Each mySheet In ActiveWorkbook.Worksheets 

    myPath = "\\myserver\myfolder\" 

    ActiveWorkbook.Sheets(mySheet.Index).Copy 
    ActiveWorkbook.SaveAs Filename:=myPath & mySheet.Name, FileFormat:=xlCSV, CreateBackup:=True 
    ActiveWorkbook.Close 

Next mySheet 

'Application.DisplayAlerts = True 

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