选定范围内的数据透视表生成

时间:2018-02-17 23:28:15

标签: excel vba excel-vba pivot-table

无法定义数据透视表的来源。我需要做的是通过选择定义数据透视表的源数据,因为在代码中不会有静态表名或静态单元格范围。

我将使用的选择是在粘贴一个表之后,所以选择将是整个表;与您在注释掉的行(在下面的代码中)中定义它的范围相同的范围。

以下代码会导致运行时错误。

我真的很新,学到很多东西。感谢您的帮助和耐心。

Sub CreatePivotTable()
'Creates a brand new Pivot table on a new worksheet from data in the ActiveSheet

Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim StartPvt As String
Dim SrcData As String

'Determine the data range you want to pivot via selection

   Dim E As Range
   Set E = Selection
   SrcData = E.Address(ReferenceStyle:=xlR1C1)

  'This piece of code below substituted for the 3 lines above works?
  'SrcData = ActiveSheet.Name & "!" & Range("A3:H7").Address(ReferenceStyle:=xlR1C1)

'Select worksheet
  Set sht = Sheets("Sheet2")
    Sheets("Sheet2").Select

'Start PivotTable below the last filled cell in Column 1
  lMaxRows = Cells(Rows.Count, "A").End(xlUp).row
  StartPvt = sht.Range("A" & lMaxRows + 2).Address(ReferenceStyle:=xlR1C1) 

'Create Pivot Cache from Source Data
  Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=SrcData)

'Create Pivot table from Pivot Cache
  Set pvt = pvtCache.CreatePivotTable( _
    TableDestination:=StartPvt, _
    tableName:=PivotTable)


End Sub

1 个答案:

答案 0 :(得分:0)

如评论所述,请先尝试下面的内容。

SrcData = E.Address(ReferenceStyle:=xlR1C1, External:=True)

取代

SrcData = E.Address(ReferenceStyle:=xlR1C1)

如果要将数据透视表转储到另一个工作表中,显式设置External参数将很重要,因为它将在返回的<中包含工作表名称 em>地址字符串,如果设置为True

根据 MSDN

  

为True以返回外部参考。返回本地引用时返回false。默认值为False。

我的评论基于评论线的作用 我只是无法检查atm,但试试你的结局。 HTH。