【问题标题】:I am having an Error in creating Pivot using Excel VBA我在使用 Excel VBA 创建 Pivot 时出错
【发布时间】:2020-11-10 21:42:19
【问题描述】:

我正在尝试使用以下代码创建数据透视,但是我收到错误,

“无效的过程调用或参数”

有人可以帮忙吗。

这是我的代码:

Sub Creatingquerypivot()
    
        Dim sht As Worksheet
        Dim pvtCache As PivotCache
        Dim pvt As PivotTable
        Dim StartPvt As String
        Dim SrcData As String
        Dim Pf As PivotField

'Create Pivot Cache from Source Data
        Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=Sheets("Queries").Name & "!" & Sheets("Queries").Range("A3").CurrentRegion.Address)
                 
'Create a new worksheet
        Set sht = Sheets.Add
        sht.Name = "Queries Summary"

'Where do you want Pivot Table to start?
        StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlA1)
        
'Create Pivot table from Pivot Cache

        

 - Set pvt = pvtCache.CreatePivotTable( _
           TableDestination:=StartPvt, _
           TableName:="QueriesSummary")

    
    'To add fields to the pivot table
    
        Set Pf = pvt.PivotFields("Folder")
        Pf.Orientation = xlRowField
           
        Set Pf = pvt.PivotFields("Category")
        Pf.Orientation = xlRowField
            
        Set Pf = pvt.PivotFields("Received")
        Pf.Orientation = xlDataField

【问题讨论】:

  • 我认为TableDestination 需要一个Range 对象,而不是String
  • 用 Range 替换字符串也不行。
  • "Not working" 不是一个有用的描述。你能edit你的问题与你正在使用的修改后的代码和错误信息吗?
  • TableDestination 需要一个 Variant - 不需要是 Range 对象,或者通过创建数据透视表记录的宏不起作用 - 它们总是使用“范围字符串”方法。

标签: excel vba runtime-error pivot-table


【解决方案1】:

正如 BigBen 所提到的,TableDestination 需要一个 Range 对象。

Dim StartPvt As Range

但你也需要像这样Set它:

发件人:

StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlA1)

收件人:

Set StartPvt = sht.Range("A3")

【讨论】:

  • TableDestination 需要一个 Variant,它可以是计算结果为 Range 的字符串或实际 Range。
【解决方案2】:

带空格的工作表名称需要用单引号引起来。最好始终添加引号,即使名称没有空格:它不会造成伤害,而且如果您稍后更改工作表名称,您也不必担心修复代码。

编辑:在测试中,似乎它只适用于 R1C1 格式范围地址?

Set sht = Sheets.Add
sht.Name = "Queries Summary"

StartPvt = "'" & sht.Name & "'!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1)

话虽如此,您已经有了可以直接使用的 Range 对象,而无需先将它们转换为字符串范围地址:

    Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=Sheets("Queries").Range("A1").CurrentRegion)
             
    Set sht = Sheets.Add
    sht.Name = "Queries Summary"
    Set pvt = pvtCache.CreatePivotTable(TableDestination:=sht.Range("A3"), _
                                        TableName:="QueriesSummary")

【讨论】:

  • 这里还是有错误:StartPvt = "'" & sht.Name & "'!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1) 错误是运行时错误'91'对象变量或未设置块变量
  • 你是如何声明StartPvt 的,sht 是否设置为工作表?我会放弃“范围字符串”方法,只使用设置实际范围对象的第二种方法。
  • 是的,Dim StartPvt As Range 和 Dim sht As Worksheet 已经存在。
  • StartPvt 是一个字符串,而不是一个范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多