【问题标题】:Defining source data on Pivot table template for VBA在 VBA 数据透视表模板上定义源数据
【发布时间】:2016-05-16 21:31:55
【问题描述】:

我在 Spreadsheetguru 上找到了此代码,但我在编辑代码时遇到了问题。

Sub CreatePivotTable()
'PURPOSE: Creates a brand new Pivot table on a new worksheet from data in the ActiveSheet
'Source: www.TheSpreadsheetGuru.com

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
  SrcData = ActiveSheet.Name & "!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1)

'Create a new worksheet
  Set sht = Sheets.Add

'Where do you want Pivot Table to start?
  StartPvt = sht.Name & "!" & sht.Range("A3").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:="PivotTable1")

End Sub

为什么我无法将 SrcData 定义为 Worksheets("SHEETNAME").Range("A1:A100")?它返回类型 13 错误:不匹配。我尝试在线查找答案,大多数示例都引用了 ActiveSheet.Range 的 SrcData 而不是定义的工作表。

谢谢!

如果您能向我展示一个示例枢轴如何用于此工作表上的工作表(“PivotExp”),那也会有很大帮助。http://imgur.com/TShQ1ls

非常感谢!

【问题讨论】:

  • SrcData 被声明为字符串,而不是范围。最好使用范围地址作为数据透视表的来源,而不是范围对象,因此我建议您保留代码原样。
  • 您需要提供地址为字符串:SrcData = "SHEETNAME!A1:A100"

标签: vba excel


【解决方案1】:

为什么我无法将 SrcData 定义为 Worksheets("SHEETNAME").Range("A1:A100")?

数据透视表适用于二维数据(表格形式),即行和列,但对于 A1:A100,您仅提供一维数据(列表形式)。您还需要根据语法规则分配源数据。

It returns a type 13 error: mismatch.

由于上述原因导致不匹配错误。

如果你能告诉我一个例子是如何枢轴的,那也会很有帮助 将为此工作表(“PivotExp”) 表。http://imgur.com/TShQ1ls

由于某种原因,图像不可见,但您可以访问以下示例链接:http://analysistabs.com/excel-vba/pivot-tables-examples/,其中显示了如何使用 VBA 代码创建数据透视表。
由于您给定的代码缺少很多与 Pivot 相关的信息,因此不会形成 Pivot,但是通过访问上面的链接,您可以了解其中缺少什么。

【讨论】:

  • 这既是错误的,也不是特别有用。您确实可以从一列创建数据透视表,但您没有解决关于为什么会发生类型不匹配错误的实际问题。
  • @Rory 是的,我的问题是不匹配,即使我尝试: Dim pivotexp As Worksheet Set pivotexp = Worksheets("PivotExp") '确定要旋转的数据范围 SrcData = pivotexp.Range ("A6:E26") 仍然返回相同的错误
  • @eddy 我在对您的原始问题的评论中提到了这一点。
  • @rory 抱歉,只是为了澄清我是否理解您的答案 将 SrcData 定义为 Worksheets("SHEETNAME").Range("A1:A100") 会导致 RANGE OBJECT,什么时候最好将源定义为 RANGE ADDRESS(即 ActiveSheet.Name & "!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1))。对吗?
  • @eddy 是的,虽然你真的应该使用:"'" & ActiveSheet.Name & "'!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1))
猜你喜欢
  • 2018-11-06
  • 2014-06-16
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
相关资源
最近更新 更多