Excel 数据透视表数据源

Excel 数据透视表数据源,excel,vba,pivot-table,Excel,Vba,Pivot Table,我有一个包含大型数据库的工作簿 (我们将其称为Basefile.xlsm) 我编写了按部门对数据进行排序的代码,并使用此代码更新一些预先存在的透视表 数据透视表和已排序的数据随后保存在每个部门的单独文件中 (我们称这些为Department1.xls、Department2.xls等) 我的问题是,每个新文件的透视表仍然引用原始工作簿,而不是新工作簿 (因此Department1.xls中的数据透视表应该从Department1.xls中的工作表中获取数据,但目前所有数据透视表仍然使用Basef

我有一个包含大型数据库的工作簿

(我们将其称为Basefile.xlsm)

我编写了按部门对数据进行排序的代码,并使用此代码更新一些预先存在的透视表

数据透视表和已排序的数据随后保存在每个部门的单独文件中

(我们称这些为Department1.xls、Department2.xls等)

我的问题是,每个新文件的透视表仍然引用原始工作簿,而不是新工作簿

(因此Department1.xls中的数据透视表应该从Department1.xls中的工作表中获取数据,但目前所有数据透视表仍然使用Basefile.xlsm作为数据源)

有没有办法纠正这个问题不使用代码生成所有透视表

    Sub Selectdata()


  Application.ScreenUpdating = False2



' filters for nivå2 enhet, cuts and pastes data into a sheet named after nivå2 -  ready for creating pivot table

Dim i As Integer
Dim WS As Worksheet

For i = Worksheets("Department").Range("g4").Value To Worksheets("Department").Range("h4").Value

Sheets("Basefile 2014").Select
ActiveSheet.Range("A:O").AutoFilter Field:=15, Criteria1:= _
    Worksheets("Department").Range("b" & i).Value

Cells.Select
Range("A29619").Activate
Selection.Copy
Sheets("Metode").Select
Set WS = Sheets.Add
ActiveSheet.Paste
WS.Name = "RawData 2014"

'shows all the data in the new worksheet
WS.Select
 ActiveSheet.Range("A:O").AutoFilter Field:=15
     Columns("l:l").Select

' repeats proceedure for 2013
Sheets("Basefile 2013").Select
ActiveSheet.Range("A:O").AutoFilter Field:=15, Criteria1:= _
Worksheets("Department").Range("b" & i).Value
Cells.Select
Range("A29619").Activate
Selection.Copy
Sheets("Metode").Select
Set WSD = Sheets.Add
ActiveSheet.Paste
WSD.Name = "RawData 2013"

'shows all the data in the new worksheet
WSD.Select
 ActiveSheet.Range("A:O").AutoFilter Field:=15
     Columns("l:l").Select

 'Refreshes all the pivot table data
 ActiveWorkbook.RefreshAll

 Application.ScreenUpdating = True

Filename = Worksheets("Department").Range("c" & i).Value & "2014"
Fname = Worksheets("Department").Range("c" & i).Value & "2013"


Sheets(Array("Funn 2013", "Pivot 2013", "RawData 2013")).Copy

With ActiveWorkbook
.SaveAs "F:\X Simulation\test\" & Fname
.Close
End With


Sheets(Array("Pivot 1.", "Pivot 2.", "Pivot 3.", "Pivot 4.", "Funn 2014", "RawData 2014")).Copy



With ActiveWorkbook
.SaveAs "F:\X Simulation\test\" & Filename
.Close
End With

Application.DisplayAlerts = False
Worksheets("RawData 2014").Delete
Worksheets("RawData 2013").Delete
Application.DisplayAlerts = True


 Next i

End Sub

这可以通过更改透视表的
SourceData
属性来实现

Worksheets("PivotTable").PivotTables(1).SourceData = Worksheets("SourceData").Range("A1:Z999").Address
当然,您需要编辑工作表参数,以及源数据的数据范围

您还可以使用宏记录器记录适当的步骤,即在Department1.xls工作表中编辑数据透视表的源,并查看它生成的代码