2016-03-30 125 views
0

我需要帮助!用于创建数据透视表的Excel VBA参考SourceData

为了将表转换为列表我使用以下VBA公式。它是通过使用记录宏和数据透视表向导(不是最优雅的解决方案)创建的,但它起作用。

ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _ 
    Array("PasteSheet!R1C1:R300C200"), Version:=xlPivotTableVersion14). _ 
    CreatePivotTable TableDestination:="", TableName:="PivotTable3", _ 
    DefaultVersion:=xlPivotTableVersion14 
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) 
ActiveSheet.Cells(3, 1).Select 
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems(_ 
    "Count of Value").Position = 1 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = _ 
    xlHidden 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = _ 
    xlHidden 
Range("A4").Select 
Selection.ShowDetail = True 

我的问题是我希望能够设置SourceData引用存储变量作为源数据范围内的每个宏运行时会发生变化,但我不能让它的工作,到处一派没有结果。我最好的尝试是尝试以下。

Dim newRange As Variant 

Range("A1").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 

Set newRange = Selection 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _ 
    newRange, Version:=xlPivotTableVersion14). _ 
    CreatePivotTable TableDestination:="", TableName:="PivotTable3", _ 
    DefaultVersion:=xlPivotTableVersion14 
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) 
ActiveSheet.Cells(3, 1).Select 
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems(_ 
    "Count of Value").Position = 1 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = _ 
    xlHidden 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = _ 
    xlHidden 
Range("A4").Select 
Selection.ShowDetail = True 

帮助将不胜感激!

+0

pls。尝试Dim newRange As Range –

回答

0

您需要以不同的方式引用源数组。我相信有比下面我的例子更好的方法,但这是行得通的

Dim newRange As Range 

Range("A1").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 

newRange = Selection 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= Array("R" & newRange.Row & "C" & newRange.Column & ":R" & newRange.Row + newRange.Rows.Count - 1 & "C" & newRange.Column + newRange.Columns.Count - 1), Version:=xlPivotTableVersion14). _ 
CreatePivotTable TableDestination:="", TableName:="PivotTable3", DefaultVersion:=xlPivotTableVersion14 
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) 
ActiveSheet.Cells(3, 1).Select 
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems("Count of Value").Position = 1 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = xlHidden 
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = xlHidden 
Range("A4").Select 
Selection.ShowDetail = True 
+0

谢谢@witchchild! – JPNMAN389