用于创建数据透视表的Excel VBA参考SourceData

时间:2016-03-30 07:23:48

标签: excel vba excel-vba pivot

我需要帮助!

为了将表格转换为列表,我使用以下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设置为引用存储的变量,因为每次运行宏时源数据范围都会发生变化,但是我无法使其工作并在每个地方使用Google搜索结果。我最好的镜头是尝试以下。

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

非常感谢帮助!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我在寻找类似问题的解决方案时偶然发现了这篇文章 无论如何。回答这个旧帖子。我可能会帮助别人。

可以通过两种方式寻址SourceData。要么是witchild使用的那个:

$ gcc hello.cpp 
/tmp/cc9uZOKP.o: In function `main':
hello.cpp:(.text+0xe): undefined reference to `std::cout'
hello.cpp:(.text+0x13): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
hello.cpp:(.text+0x20): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/tmp/cc9uZOKP.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x50): undefined reference to `std::ios_base::Init::Init()'
hello.cpp:(.text+0x65): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

或者,第二种方式:

"nameofyourworksheet!R1C1:R" & Nbroftherowsofthesourcedataorarray & "C17", Version:=xlPivotTableVersion15).CreatePivotTable _'

代码行:.Address(,,xlR1C1,True)表示该范围将转换为格式“ R..C ..”以使其起作用。我没有尝试过,但是我相信论坛:p

希望我能够帮助人们寻找该问题的解决方案