2016-08-13 7 views
1

У меня есть очень похожий вопрос, как этот пост: Save individual Excel sheets as CSVСохранить Конкретная один лист, как .csv

Мой вопрос отличается тем, что мне нужно только один лист для сохранения Это ответ с этого поста

Dim ws As Worksheet 

For Each ws In ActiveWorkbook.Worksheets 
    ws.SaveAs "C:\docs\" & ws.Name & ".csv", xlCSV 
Next 

Этот код сохраняет каждый лист в определенной папке и называет файл таким же, как и рабочий лист. 2 проблемы, я вижу:

1 - Рабочая книга, над которой вы в настоящее время работали, становится самым последним листом, сохраненным кодом. Если вы хотите продолжать работать над своей книгой, вам нужно открыть исходный файл. Было бы лучше, если бы новая книга была открыта и сохранена отдельно от той, над которой ведется работа.

2- Он сохраняет каждый рабочий лист. Мне нужно только, чтобы сохранить один конкретный лист, т.е. Лист2

я нашел этот другой код, но я новичок в VBA и только знать, как создать макрос, скопируйте & вставить код в него. Я получаю ошибку при запуске кода.

Sub test() 

Application.DisplayAlerts = False 

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

Application.DisplayAlerts = True 

End Sub 

Надеюсь, меня могут подтолкнуть в правильном направлении. Благодаря!

ответ

3
  1. strSourceSheet является лист, который имеет имя/номер листа, который вы хотите экспортировать
  2. strFullname имя файла с пути CSV. Так просто.

Теперь посмотрим этот код

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

Скажем, я хочу, чтобы скопировать Sheet2 то я бы написал как

Dim strSourceSheet As String 
Dim strFullname As String 

'~~> Change the below two lines as per your requirements 
strSourceSheet = "Sheet2" 
strFullname = "C:\Temp\MyCsv.Csv" 

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

Вы заметили, как мы переключаемся между ThisWorkbook и ActiveWorkbook. Когда вы копируете лист, создается новая книга и становится активной, и поэтому мы закрываем ее, используя ActiveWorkbook

Надеюсь, это поможет.

+1

В вашем примере strSourceSheet (строковая переменная) должен быть установлен на «Sheet2», а не на рабочий лист. – YowE3K

+0

@ YowE3K: Да, вы правы. Я непосредственно набрал его, не тестируя его (что-то, что я редко делаю). Я исправил этот пост. –

+0

Re '(что-то, что я редко делаю)' - вы лучше SOer, чем я, - я обычно отвечаю без тестирования и замечаю только, что он не работает, когда OP жалуется на ошибки. (Я пытаюсь поправиться, но это медленный прогресс.) – YowE3K

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