Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中复制数据透视表值_Vba_Excel_Pivot Table - Fatal编程技术网

在VBA中复制数据透视表值

在VBA中复制数据透视表值,vba,excel,pivot-table,Vba,Excel,Pivot Table,我已经通过宏创建了透视表,并希望使用VBA将透视表复制为值。创建数据透视表进行得很顺利,但将其复制到另一个工作表却让我头疼。代码如下: Sub test() Dim shtTarget, pvtSht As Worksheet Dim pc As PivotCache Dim pt As PivotTable Dim field As PivotField Dim rngSource As Range With ActiveWorkbook Set rngSource = .Sheet

我已经通过宏创建了透视表,并希望使用VBA将透视表复制为值。创建数据透视表进行得很顺利,但将其复制到另一个工作表却让我头疼。代码如下:

Sub test()
Dim shtTarget, pvtSht As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Dim field As PivotField
Dim rngSource As Range

With ActiveWorkbook
    Set rngSource = .Sheets(2).Range("H:I").CurrentRegion
    Set shtTarget = .Sheets.Add(After:=.Sheets(.Sheets.count))
    shtTarget.Name = "Temp"
    Set pc = .PivotCaches.Create(xlDatabase, rngSource, xlPivotTableVersion14)
    Set pt = pc.CreatePivotTable(shtTarget.Range("A1"), "PivotTable1", , xlPivotTableVersion14)

End With

With shtTarget.PivotTables("PivotTable1").PivotFields("Concatenate")
    .Orientation = xlRowField
    .Position = 1
End With

With shtTarget
    .PivotTables("PivotTable1").AddDataField .PivotTables( _
    "PivotTable1").PivotFields("SCREEN_ENTRY_VALUE"), "Count of SCREEN_ENTRY_VALUE" _
    , xlSum
End With

With ActiveWorkbook
    Set pvtSht = .Sheets.Add(After:=.Sheets(.Sheets.count))
    pvtSht.Name = "Sum of Element Entries"

'==========================I'm stuck on this line=================================

    .Sheets(shtTarget).PivotTables("PivotTable1").TableRange1.Copy 
    pvtSht.Range("A1").PasteSpecial xlPasteValues
End With

End Sub

错误是类型不匹配。

请尝试下面的代码,它有点“干净”,我所做的修改:

  • 1)要复制数据透视表的数据并粘贴到另一个
    工作表中作为值,需要使用
    TableRange2
    而不是
    TableRange1
  • 2)您已经定义了
    pt
    对象,并将其很好地设置到了
    数据透视表中,为什么不继续使用它呢?您的代码中到处都有
    shtTarget。数据透视表(“数据透视表1”)
    可以替换为短的
    pt
代码(已测试)


.Sheets(shtTarget).PivotTables
-->
shtTarget.PivotTables
@A.S.H仍然不工作:(.无论如何,我已经做了一个变通。刚刚复制了Pivot的范围值:)@ramedju在我下面的答案中尝试了我的代码吗?有什么反馈吗?我也在试着编写代码,在“Set pc=.PivotCaches…”一行出现运行时错误1004。有什么想法吗?@LarsHovden try
Set pc=.PivotCaches.Create(xlDatabase,rngSource.Address(False,False,xlA1,xlExternal))
,并将
ActiveWorkbook
更改为完全限定的
Workbook
对象您是指使用ActiveWorkbook还是指使用Workbook?@LarsHovden而不是
ActiveWorkbook
使用类似
Dim wb as Workbook
的对象,然后将其设置为您要使用的工作簿。最后一次使用wb时出现运行时错误5:过程调用或参数无效
Option Explicit

Sub test()

Dim shtTarget As Worksheet, pvtSht As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Dim field As PivotField
Dim rngSource As Range

With ActiveWorkbook
    Set rngSource = .Sheets(2).Range("H:I").CurrentRegion
    Set shtTarget = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    shtTarget.Name = "Temp"

    Set pc = .PivotCaches.Create(xlDatabase, rngSource, xlPivotTableVersion14)
    Set pt = pc.CreatePivotTable(shtTarget.Range("A1"), "PivotTable1", , xlPivotTableVersion14)
End With

With pt.PivotFields("Concatenate")
    .Orientation = xlRowField
    .Position = 1
End With

pt.AddDataField pt.PivotFields("SCREEN_ENTRY_VALUE"), "Sum of SCREEN_ENTRY_VALUE", xlSum

With ActiveWorkbook
    Set pvtSht = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    pvtSht.Name = "Sum of Element Entries"

    pt.TableRange2.Copy
    pvtSht.Range("A1").PasteSpecial xlPasteValues
End With

End Sub