【问题标题】:VBA ChangePivotCache Run-time Error 13: Type MismatchVBA ChangePivotCache 运行时错误 13:类型不匹配
【发布时间】:2013-09-23 17:35:21
【问题描述】:

问题:

你是我最后的希望。我已经在这个问题上工作了三天,但没有运气(互联网上的信息令人沮丧......)

我有一个宏,可以复制“主”文件(将一些模块和几张表复制到新副本中)。其中一张复制的工作表包含几个引用“主”文件数据的枢轴和切片器。

主文件的这个副本不像主文件那样包含整个数据集,并且这些剪辑将被不同的用户使用,所以我不希望枢轴引用主数据集。 所以我的挑战是更改每个枢轴的源数据(最好都在同一个PivotCache),然后将适用的切片器连接到必要的枢轴。

我将切片器与枢轴断开的代码工作正常,我重新连接切片器的代码工作正常。我只是无法获得更改数据源的第一个支点。

令人沮丧的是,在两个不同的场合我让它工作,只是让它在我下次测试时抛出Run-time error '13': Type mismatch

我的第一个想法是我对工作簿/工作表的名称不够具体,因此我修改了代码以反映确切的工作簿和工作表。唉,错误仍然存​​在。引用的工作簿和工作表都存在,没有缺少列标题,有一个名为 PivotTable1 的数据透视表,并且我的范围设置正确。

With 语句的第二行抛出错误。

我的代码(摘录):

Dim pTable As PivotTable
Dim LEADData As Range
Dim sCache As SlicerCache
Dim pCache As PivotCache

thislastrow = Sheets("LEAD Data").Range("B" & Rows.Count).End(xlUp).Row
Set LEADData = Workbooks(cutwkbk2).Sheets("LEAD Data").Range("B9:AT" & thislastrow)
'Workbooks(cutwkbk2).Activate

With Workbooks(cutwkbk2).Sheets("Cabinet Reporting")
     'Debug.Print .PivotTables("PivotTable1").SourceData
     .PivotTables("PivotTable1").ChangePivotCache Workbooks(cutwkbk2).PivotCaches.Create(xlDatabase, LEADData)
End With

我也尝试过使用像.PivotTables(1) 这样的数据透视索引,但这也会引发错误。令我困惑的部分是它是如何在两个不同的场合下工作的,但是即使测试之间没有任何变化,它也会失败......

请提出建议!我对此感到不知所措!

【问题讨论】:

  • 没有真正解决您的具体问题,而是将主文件的部分内容复制到新工作簿中,您是否考虑过制作主文件的完整副本并删除您没有删除的部分/数据想要在副本中?
  • @TimWilliams 在这个项目开始时,复制相关信息是有意义的,因为主文件包含的数据/表格/宏比新副本包含的要多得多。虽然情况仍然如此(虽然我宁愿不重写所有代码),但如果无法解决此问题,您的建议可能是唯一可行的选择。

标签: vba excel excel-2010 pivot-table


【解决方案1】:

在黑暗中拍摄..试试这个(未测试)

Sub Sample()
    Dim pTable As PivotTable
    Dim sCache As SlicerCache
    Dim pCache As PivotCache

    Dim LEADData As String

    thislastrow = Sheets("LEAD Data").Range("B" & Rows.Count).End(xlUp).Row
    LEADData = "LEAD Data!" & "R9C2:R" & thislastrow & "C46"

    With Workbooks(cutwkbk2).Sheets("Cabinet Reporting")
         .PivotTables("PivotTable1").ChangePivotCache Workbooks(cutwkbk2).PivotCaches.Create(xlDatabase, LEADData)
    End With
End Sub

三思而后行

Sub Sample()
    Dim pTable As PivotTable
    Dim sCache As SlicerCache
    Dim pCache As PivotCache

    Dim LEADData As String

    thislastrow = Sheets("LEAD Data").Range("B" & Rows.Count).End(xlUp).Row

    LEADData = ThisWorkbook.Path & "[" & _
               ThisWorkbook.Name & _
               "]LEAD Data!" & _
               "R9C2:R" & thislastrow & "C46"

    With Workbooks(cutwkbk2).Sheets("Cabinet Reporting")
         .PivotTables("PivotTable1").ChangePivotCache Workbooks(cutwkbk2).PivotCaches.Create(xlDatabase, LEADData)
    End With
End Sub

【讨论】:

  • 非常感谢!那行得通(最高建议;我还没有尝试过最低建议)!我仍然不确定为什么其他方式会奏效那几次......但还是谢谢你!
猜你喜欢
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多