Excel 2003 VBA: переместите лист в новую книгу, на которую ссылается переменная

У меня есть функция, предназначенная для запуска команды ShowPages() сводной таблицы, а затем сохранения каждого листа в отдельный файл.

Вот как я хотел бы это сделать:

Sub Split()
    ThisWorkbook.Sheets("Data").PivotTables("Data").ShowPages PageField:="Codename"
    Dim newWb As Workbook

    For Each s In ThisWorkbook.Sheets
        If s.Name <> "Data" Then
            Set newWb = s.Move #This is the line I'm trying to work out
            newWb.SaveAs Filename:="C:\Export\" + s.Name + ".xls"
            newWb.Close
        End If
    Next s

End Sub

К сожалению, это приводит к множеству проблем, связанных с отсутствием созданных объектов и т.п. (по понятным причинам). Каков наиболее разумный способ сделать это?


person Margaret    schedule 26.07.2010    source источник


Ответы (1)


Хотя это устарело, и принятый солдатом ответ очень хорош, просто хотел добавить одну вещь. Методы Excel VBA Sheets.Copy и Sheets.Move имеют очень приятную функцию. Они принимают любой из двух необязательных аргументов, «До» или «После», для позиционирования перемещенного/скопированного листа. В документации Excel отмечается, что:

 If you don't specify either Before or After, Microsoft Excel
 creates a new workbook that contains the moved [copied] sheet.

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

 Sheets(sheetname).Move

в принятом ответе вместо:

 Set newWb = Workbooks.Add
 s.Move before:=newWb.Sheets(1)
 Application.DisplayAlerts = False
 newWb.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete
 Application.DisplayAlerts = True

Остальная часть кода солдата будет прекрасно работать с этим упрощением.

person Mark Goldfain    schedule 09.05.2013