Все, что вам нужно добавить в свой код, чтобы исключить скрытые листы, - это простой If..Then
оператор , чтобы проверить, является ли Worksheet.Visible
свойство равным True
или False
,
If Not yourWorsheet.Visible Then...
... затем пропустите этот рабочий лист.
Следующая процедура представляет собой более простой общий подход к тому, что вы пытаетесь выполнить...
Экспорт видимых рабочих листов в их собственные рабочие книги:
Метод worksheet.Copy
создаст новую рабочую книгу, если ни Before
, ниAfter
.
Sub saveVisibleSheetsAsXLSM() 'saves all visible sheets as new xlsx files
Const exportPath = "x:\yourDestinationPath\"
Dim ws As Worksheet, wbNew As Workbook
For Each ws In ThisWorkbook.Sheets 'for each worksheet
If ws.Visible Then 'if it's visible:
Debug.Print "Exporting: " & ws.Name
ws.Copy '(if no params specified, COPY creates + activates a new wb)
Set wbNew = Application.ActiveWorkbook 'get new wb object
wbNew.SaveAs exportPath & ws.Name & ".xlsm", 52 'save new wb
wbNew.Close 'close new wb
Set wbNew = Nothing 'cleanup
End If
Next ws
Set ws = Nothing 'clean up
End Sub
Worksheet.Copy
Примечания:
Если вы не укажете Before
или After
,Microsoft Excel создает новую рабочую книгу , которая содержит скопированный объект листа, который содержит скопированный объект Worksheet
.Недавно созданная рабочая книга содержит свойство Application.ActiveWorkbook
(Excel) и содержит одну рабочую таблицу.На одном рабочем листе сохраняются свойства Worksheet.Name
Свойство (Excel) и Worksheet.CodeName
Свойство (Excel) исходного листа.Если скопированный лист содержал кодовый лист рабочего листа в проекте VBA, он также переносится в новую рабочую книгу.
Массив из нескольких рабочих листов можно скопировать в новый пустой Объект рабочей книги (Excel) объект подобным образом.
(Источник: Документация )