Как сохранить рабочие листы в виде отдельных рабочих книг?
Категория: Basic
2012-07-04 16:05:59
Для того, чтобы сохранить все рабочие листы (в т.ч. и скрытые) в виде отдельных .xls файлов, имена которых будут совпадать с именами рабочих листов - источников, можно использовать нижеприведённый макрос, предварительно указав свою папку для сохранения.
code: #vba
Private Sub WorksheetSaveAsFile() iPath$ = "C:\Мои документы\Архив" If Dir(iPath$, vbDirectory) = "" Then MsgBox "Указанная папка " & iPath$ & vbNewLine & _ "была удалена, перемещена или переименована ", vbExclamation, "" Exit Sub End If On Error GoTo ErrHandler With Application .EnableCancelKey = xlDisabled .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlManual Dim iWorksheet As Worksheet, iHidden As Boolean For Each iWorksheet In .ThisWorkbook.Worksheets If iWorksheet.Visible <> True Then iHidden = True iOldVisible& = iWorksheet.Visible iWorksheet.Visible = True End If iWorksheet.Copy With .ActiveSheet .SaveAs FileName:=iPath$ & "\" & .Name .Parent.Close saveChanges:=True End With 'Or 'With .ActiveWorkbook '.Close FileName:=iPath$ & "\" & _ '.ActiveSheet.Name, saveChanges:=True 'End With If iHidden = True Then iWorksheet.Visible = iOldVisible& iHidden = False 'Not iHidden End If Next ErrHandler: If Err.Number <> 0 Then MsgBox Err.Description, vbCritical, Err.Number End If .Calculation = xlAutomatic .EnableEvents = True .DisplayAlerts = True .ScreenUpdating = True .EnableCancelKey = xlInterrupt End With End Sub
- Если в выбранной папке будет находиться файл с аналогичным именем, то он будет заменён на новый.
- Если в рабочем листе есть ячейки, содержащие более 255 символов, то копирование листа приведёт к усечению таких данных до 255 символов (включительно)
- Если структура текущей рабочей книги защищена, то копирование скрытых рабочих листов приведёт к возникновению ошибки, которую можно избежать, если добавить соответствующую проверку.
Поделиться: