VBA.Экспорт только видимого листа в отдельную книгу - PullRequest
0 голосов
/ 13 ноября 2018
Sub SaveShtsAsBook() 
    ‘Select all visible and hide sheet’
    Dim Sheet As Worksheet, SheetName$, MyFilePath$, N& 
    MyFilePath$ = ActiveWorkbook.Path & "\" & _ 
    Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) 
    With Application 
        .ScreenUpdating = False 
        .DisplayAlerts = False 
         '      End With
        On Error Resume Next '<< a folder exists
        MkDir MyFilePath '<< create a folder
        For N = 1 To Sheets.Count 
            Sheets(N).Activate 
            SheetName = ActiveSheet.Name 
            Cells.Copy 
            Workbooks.Add (xlWBATWorksheet) 
            With ActiveWorkbook 
                With .ActiveSheet 
                    .Paste 
                    .Name = SheetName 
                    [A1].Select 
                End With 
                 'save book in this folder
                .SaveAs Filename:=MyFilePath _ 
                & "\" & SheetName & ".xlsx" 
                .Close SaveChanges:=True 
            End With 
            .CutCopyMode = False 
        Next 
    End With 
    Sheet1.Activate 
End Sub 

У меня есть рабочая книга, которая содержит много листов, которые имеют видимые и скрытые.Я только хочу экспортировать каждый видимый лист в отдельную рабочую книгу.этот текущий код выше может сделать экспорт для всех листов в книге, но я должен удалить их 1 на 1 после этого.Надеюсь, это объясняет мою ситуацию.

1 Ответ

0 голосов
/ 13 ноября 2018

Все, что вам нужно добавить в свой код, чтобы исключить скрытые листы, - это простой 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) объект подобным образом.

(Источник: Документация )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...