2015-09-28 3 views
1

Я хочу просмотреть все книги в папке, извлечь листы с именем «Имя листа» и сохранить их как .csv-файлы с именем файла, из которого они были созданы. Какой быстрый способ сделать это?Цикл функции vba через все книги в папке

Пример функции Vba в вопросе:

Sub Sheet_SaveAs() 
    Dim wb As Workbook 
    Sheets("Sheet Name").Copy 
    Set wb = ActiveWorkbook  
    With wb 
    .SaveAs ThisWorkbook.Path & "\" & ThisWorkbook.name, FileFormat:=xlCSV 
    '.Close False 
    End With 
End Sub 

Большое спасибо для смотреть

EDIT: Не дубликатом, потому что я работаю на извлечение листов из нескольких книг, а не несколько листов из одной книги ,

EDIT2: спасибо, все.

+0

возможно дубликат [Сохранение первенствовать листа в CSV-файлы с файла + имя рабочего листа, используя VB] (HTTP: // stackoverflow.com/questions/10551353/saving-excel-worksheet-to-csv-files-with-filenameworksheet-name-using-vb) – skkakkar

+0

Я думаю, что вы правы, хотя я пробовал код, помеченный как ответ, и я получаю ошибка в том, что мой файл может быть поврежден или прочитан onl y, которого я раньше не получал. – user53423103981023

+0

• вы не можете использовать именованную константу, такую ​​как xlCSV, в vbscript, поэтому использование 6 ниже в формате CSV. ~ For Each objws В objWB.Sheets objws.Copy objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6 objExcel.ActiveWorkbook.Close ложных Следующая ~, а затем повторите попытку – skkakkar

ответ

0

Нечто подобное.

Изменить этот путь, чтобы удовлетворить ваши папки

strFolder = "c:\temp" 

код

Sub LoopThroughFiles() 
    Dim Wb As Workbook 
    Dim ws As Worksheet 
    Dim strFolder As String 
    Dim strFile As String 

    strFolder = "c:\temp" 
    strFile = Dir(strFolder & "\*.xls*") 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
    End With 

    Do While Len(strFile) > 0 
    Set Wb = Workbooks.Open(strFolder & "\" & strFile) 
    Set ws = Nothing 
    On Error Resume Next 
    Set ws = Wb.Sheets("Sheet Name") 
    On Error GoTo 0 
    If Not ws Is Nothing Then ws.SaveAs Left$(Wb.FullName, InStrRev(Wb.FullName, ".")) & "csv", FileFormat:=xlCSV 
    Wb.Close False 
     strFile = Dir 
    Loop 

    With Application 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
    End With 
End Sub 
Смежные вопросы