2010-07-26 19 views
2

我有意在運行數據透視表的ShowPages()命令,然後將每個片保存到一個單獨的文件中的函數引用的新的工作簿。Excel 2003中VBA:移動一個片到由可變

這是我多麼希望我能做到這一點:

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 

不幸的是,這是運行到了一堆問題與不具有創建的對象和諸如此類的(可以理解)做。什麼是最明智的方式來做到這一點?

回答

6
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 
     ''Added by Soldieraman 
     Dim sheetName As String 
     sheetName = s.Name 

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

     ''Edited by soldieraman 
     newWb.SaveAs Filename:="C:\Export\Test" & sheetName & ".xls" 
     newWb.Close 
    End If 
Next s 
End Sub 
2

雖然這是舊的,並且由soldieraman接受的答案是非常好的,只是想補充一件事。 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 

的的soldieraman代碼剩下的就很好地工作,這種簡化。