Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 带宏的Excel透视表_Vba_Excel_Pivot Table - Fatal编程技术网

Vba 带宏的Excel透视表

Vba 带宏的Excel透视表,vba,excel,pivot-table,Vba,Excel,Pivot Table,我录制了一个宏,它生成了一个非常简单的透视表。回放宏时,数据透视表中出现错误 我得到: 无效的过程调用或参数 因此,我返回并在SourceData和TableDestination周围加上单引号。现在我得到了一个数据透视表,但只有总数。它应该给出A列中所有项目出现的次数 这是密码 Sub testpivot() ' ' testpivot Macro ' ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=

我录制了一个宏,它生成了一个非常简单的透视表。回放宏时,数据透视表中出现错误

我得到:

无效的过程调用或参数

因此,我返回并在
SourceData
TableDestination
周围加上单引号。现在我得到了一个数据透视表,但只有总数。它应该给出A列中所有项目出现的次数

这是密码

 Sub testpivot()
'
' testpivot Macro
'
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "'GF Response Detail R'!R1C1:R65536C1", Version:= _
    xlPivotTableVersion10).CreatePivotTable TableDestination:= _
    "'GF Response Detail R'!R2C10", TableName:="PivotTable1", _
    DefaultVersion:=xlPivotTableVersion10
Sheets("GF Response Detail R").Select
Cells(2, 7).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Region")
    .Orientation = xlRowField
    .Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
    "PivotTable1").PivotFields("Region"), "Count of Region", xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False

End Sub

您想从工作表中删除透视表。在运行宏之前。

您希望从工作表中删除透视表。在运行宏之前。

下面的代码将首先检查工作表中是否有“数据透视表1”,如果有,则会将其删除

之后,它将在“GF响应详细信息R”表上创建一个新的
数据透视表,更新后的数据在列“a”中

代码

Option Explicit

Sub testpivot()

' testpivot Macro
Dim PivTbl      As PivotTable
Dim PivCache    As PivotCache
Dim DataSht     As Worksheet
Dim lastRow     As Long
Dim SrcRng      As Range
Dim SrcData     As String

' set the Pivot Data
Set DataSht = Worksheets("GF Response Detail R")    
With DataSht
    lastRow = .Range("A" & .Rows.Count).End(xlUp).Row '<-- get last row in Column A

    Set SrcRng = .Range("A1:A" & lastRow) '<-- set dynamic Pivot Range
    SrcData = SrcRng.Address(True, True, xlA1, xlExternal) '<-- get the Range Address, including sheet's name
End With    

'-- first check if there's a "PivotTable1" in sheet >> if Yes, Delete it
For Each PivTbl In DataSht.PivotTables
    If PivTbl.Name = "PivotTable1" Then
        DataSht.Range(PivTbl.TableRange2.Address).Delete Shift:=xlUp
        Exit For
    End If
Next PivTbl

' set the Pivot Cache
'Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)

' Option 2: set the Pivot Cache
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcRng)

' Option 3: set the Pivot Cache
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15)

' create a new Pivot Table in "EXP Pivot" sheet, start from Cell A1
Set PivTbl = DataSht.PivotTables.Add(PivotCache:=PivCache, TableDestination:=DataSht.Range("J2"), TableName:="PivotTable1")

With PivTbl
    With .PivotFields("Region")
        .Orientation = xlRowField
        .Position = 1
    End With

    .AddDataField .PivotFields("Region"), "Count of Region", xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False
End With

End Sub
选项显式
子测试透视()
'testpivot宏
将PivTbl设置为数据透视表
Dim PivCache作为数据透视缓存
Dim DataSht As工作表
最后一排一样长
变光SrcRng As范围
将数据设置为字符串
'设置透视数据
Set DataSht=工作表(“GF响应细节R”)
使用DataSht

lastRow=.Range(“A”&.Rows.Count).End(xlUp).Row'下面的代码将首先检查工作表中是否有“数据透视表1”,如果有,则将删除它

之后,它将在“GF响应详细信息R”表上创建一个新的
数据透视表,更新后的数据在列“a”中

代码

Option Explicit

Sub testpivot()

' testpivot Macro
Dim PivTbl      As PivotTable
Dim PivCache    As PivotCache
Dim DataSht     As Worksheet
Dim lastRow     As Long
Dim SrcRng      As Range
Dim SrcData     As String

' set the Pivot Data
Set DataSht = Worksheets("GF Response Detail R")    
With DataSht
    lastRow = .Range("A" & .Rows.Count).End(xlUp).Row '<-- get last row in Column A

    Set SrcRng = .Range("A1:A" & lastRow) '<-- set dynamic Pivot Range
    SrcData = SrcRng.Address(True, True, xlA1, xlExternal) '<-- get the Range Address, including sheet's name
End With    

'-- first check if there's a "PivotTable1" in sheet >> if Yes, Delete it
For Each PivTbl In DataSht.PivotTables
    If PivTbl.Name = "PivotTable1" Then
        DataSht.Range(PivTbl.TableRange2.Address).Delete Shift:=xlUp
        Exit For
    End If
Next PivTbl

' set the Pivot Cache
'Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)

' Option 2: set the Pivot Cache
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcRng)

' Option 3: set the Pivot Cache
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15)

' create a new Pivot Table in "EXP Pivot" sheet, start from Cell A1
Set PivTbl = DataSht.PivotTables.Add(PivotCache:=PivCache, TableDestination:=DataSht.Range("J2"), TableName:="PivotTable1")

With PivTbl
    With .PivotFields("Region")
        .Orientation = xlRowField
        .Position = 1
    End With

    .AddDataField .PivotFields("Region"), "Count of Region", xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False
End With

End Sub
选项显式
子测试透视()
'testpivot宏
将PivTbl设置为数据透视表
Dim PivCache作为数据透视缓存
Dim DataSht As工作表
最后一排一样长
变光SrcRng As范围
将数据设置为字符串
'设置透视数据
Set DataSht=工作表(“GF响应细节R”)
使用DataSht

lastRow=.Range(“A”&.Rows.Count).End(xlUp).Row'在这里试试这个。这与@Shai Rado的建议略有不同

Sub RegionMacro()

Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long

'define the sheet, last row, and pivot table range
Set DSheet = Worksheets("GF Response Detail R")
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set PRange = DSheet.Range("A1:A" & LastRow)

'get address of range
sData = PRange.Address(False, True)

'check to see if the table already exist and delete it if it does
For Each PTable In DSheet.PivotTables
    If PTable.Name = "RegionCountTable" Then
        DSheet.Range(PTable.TableRange2.Address).Delete Shift:=xlUp
        Exit For
    End If
Next PTable

'define the pivot cache
Set PCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

'insert a blank pivot table into cell G2 and call it "RegionCountTable"
Set PTable = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(2, 7), TableName:="RegionCountTable")

'insert row fields
With PTable

    With ActiveSheet.PivotTables("RegionCountTable").PivotFields("Region")
     .Orientation = xlRowField
     .Position = 1
    End With

    'create a count for the region
    .AddDataField .PivotFields("Region"), "Count of Region", xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False
End With


End Sub

试试这个。这与@Shai Rado的建议略有不同

Sub RegionMacro()

Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long

'define the sheet, last row, and pivot table range
Set DSheet = Worksheets("GF Response Detail R")
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set PRange = DSheet.Range("A1:A" & LastRow)

'get address of range
sData = PRange.Address(False, True)

'check to see if the table already exist and delete it if it does
For Each PTable In DSheet.PivotTables
    If PTable.Name = "RegionCountTable" Then
        DSheet.Range(PTable.TableRange2.Address).Delete Shift:=xlUp
        Exit For
    End If
Next PTable

'define the pivot cache
Set PCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

'insert a blank pivot table into cell G2 and call it "RegionCountTable"
Set PTable = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(2, 7), TableName:="RegionCountTable")

'insert row fields
With PTable

    With ActiveSheet.PivotTables("RegionCountTable").PivotFields("Region")
     .Orientation = xlRowField
     .Position = 1
    End With

    'create a count for the region
    .AddDataField .PivotFields("Region"), "Count of Region", xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False
End With


End Sub


是否每次都要创建一个新的透视表?因为您可以创建一个宏来更新工作簿中当前的数据透视表。使用此当前设置,您将仅使用定义参数中的数据。因此,它将仅基于A1:A65536的输入创建轴,因此,如果下次有66K行,宏将仅基于最初定义的~65k行。是的。每个月都有一份新的报告。因此,我们将每次在新文档上运行宏。是否每次都要创建新的透视表?因为您可以创建一个宏来更新工作簿中当前的数据透视表。使用此当前设置,您将仅使用定义参数中的数据。因此,它将仅基于A1:A65536的输入创建轴,因此,如果下次有66K行,宏将仅基于最初定义的~65k行。是的。这是一个每月的新报告。因此,我们每次都会在一个新文档上运行宏。我在集合PivTbl=@MattWiner上得到“无效的过程调用或参数”。请尝试编辑的代码(更改了
PivCache
行)我尝试了一个全新的空白表,其中只有列a数据。仍在PivTable上获取“无效过程”line@MattWiner您正在运行哪个Excel版本?在
设置PivTbl
行之前添加
Debug.Print PivCache.SourceData
,在即时窗口中得到什么?Excel 2013。从debug.print
“GF响应详细信息R”!R1C1:R151C1
我在集合PivTbl=@MattWiner上得到了“无效的过程调用或参数”。请尝试编辑的代码(更改了
PivCache
行)我尝试了一个全新的干净表格,其中只包含a列数据。仍在PivTable上获取“无效过程”line@MattWiner您正在运行哪个Excel版本?在
设置PivTbl
行之前添加
Debug.Print PivCache.SourceData
,在即时窗口中得到什么?Excel 2013。从debug.print
“GF响应详细信息R”!R1C1:R151C1
一旦您定义了
设置PTable
并使用PTable
设置了
,您就不需要使用ActiveSheet.PivotTables(“RegionCountTable”).PivotFields(“Region”)
只要使用
。PivotFields(“Region”)
我感谢大家的帮助。不幸的是,没有取得任何进展。不确定是我的Excel版本还是我做错了什么。我仍然得到
无效的过程调用或参数
到目前为止,我让它运行的唯一方法是添加一个新的工作表(我可以接受),将其设置为活动工作表。然后设置
TableDestination:=”
,但当您运行我的代码时,结果仅为“148”区域的总
“计数”
,您得到错误的原因是什么?我不确定您是如何得到该错误的。唯一的两个原因是参数可能超出允许值的范围,以及如果试图调用在当前平台(Mac vs PC)上无效的过程。参数似乎在参数范围内。您是在Mac还是PC上?一旦您定义了
设置PTable
并使用PTable
设置了
,您就不需要使用ActiveSheet.PivotTables(“RegionCountTable”).PivotFields(“Region”)
只要使用
。PivotFields(“Region”)
我感谢大家的帮助。不幸的是,没有取得任何进展。不确定是我的Excel版本还是我做错了什么。我仍然得到
无效的过程调用或参数
到目前为止,我让它运行的唯一方法是添加一个新的工作表(我可以接受),将其设置为活动工作表。然后设置
TableDestination:=”
,但当您运行我的代码时,结果仅为“148”区域的总
“计数”
,您得到错误的原因是什么?我不确定您是如何得到该错误的。这个