9

最近我正在学习如何使用 VBA 在 Excel 中自动创建数据透视表,而该Excel.Range.Group()方法的实现让我感到很奇怪。第四个参数Periods采用 7 个元素的布尔值数组来指示分组是按秒、分、小时、天、月、季度还是年。通常,您会看到这样的事情是通过使用一种Enum类型来完成的,该类型的成员可以Or'd 一起表示一个或多个选项已打开 - 该MsgBox函数就是一个很好的例子

例如,我本来希望用法更像这样......

MyPivotTable.DataRange.Cells(1).Group Periods:=vbGroupPeriods.Days Or _
    vbGroupPeriods.Months

代替...

MyPivotTable.DataRange.Cells(1).Group Periods:=Array(False, False, False, _
    True, True, False, False)

我环顾四周试图理解为什么它是用 a 完成的Array,但迄今为止空手而归。所以,我的问题是为什么要这样做?是否有一些我没有看到的限制?这是某人的个人选择吗?或者这只是一个谜?不是想抱怨,只是想理解。

4

2 回答 2

2

Q1。为什么这样做?

也许是因为它给了你更多的灵活性?True对我来说,输入7 次更容易

Array(True, True, True, True, True, True, True)

而不是说

vbGroupPeriods.Seconds Or _
vbGroupPeriods.Minutes Or _
vbGroupPeriods.Hours Or _
vbGroupPeriods.Days Or _
vbGroupPeriods.Months Or _
vbGroupPeriods.Quarters Or _
vbGroupPeriods.Years 

数组中的序列也不是很难记住......

秒-->分-->小时-->天-->月-->季度-->年

Q2。是否有一些我没有看到的限制?

否 没有这样的限制。

Q3。这是某人的个人选择吗?或者这只是一个谜?

不 :) 不神秘。这绝不是任何人的个人选择。Microsoft 有一个专门用于 Excel 开发的团队,负责决定和灌输特定的特性/功能。

于 2013-12-18T03:17:43.867 回答
0

添加到 Siddharth Rout 的答案中,这是我发现的地方和内容:

[ http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=153:excel-pivot-tables-grouping-group-items-group-data-and-group-date-values-using -vba&catid=79&Itemid=475][1]

使用分组方法对数字项或日期值进行分组。语法:RangeObjectVariable.Group(Start, End, By, Periods)。Start、End、By 和 Periods 的所有 4 个参数都是可选的,并在下面解释。

开始- 分组从此值开始,如果省略或 True 表示字段中的第一个值。

End - 分组在此值处结束,如果省略或 True 表示字段中的最后一个值。

By - 指定数字字段的组大小;对于日期字段,它指示天数,以防数组元素 4(天)设置为 True,并且 Periods 参数中的所有其他元素都为 False,否则此参数将被忽略并为组选择默认大小。

点 - 7 个布尔值的数组:

  • 元素 1 表示秒周期
  • 元素 2 是分钟
  • 元素 3 是小时
  • 元素 4 是天
  • 元素 5 是月份
  • 元素 6 是宿舍
  • 元素 7 是年。

Bollean 值为 True 的元素表示创建组的时间段。Periods 的这个参数仅对 Date 字段有效。

可能需要注意的是 RangeObject 只能是单个单元格,否则该方法将失败而不会显示任何错误。

Sub PivotTableGroupData1()


Dim PvtTbl As PivotTable
Dim rngGroup As Range
Set PvtTbl = Worksheets("Sheet6").PivotTables("PivotTable1")

'set range of dates to be grouped
Set rngGroup = PvtTbl.PivotFields("Dates").DataRange

'rngGroup.Cells(1) indicates the first cell in the range of rngGroup - remember    that the RangeObject in the Group Method should only be a single cell otherwise the method will fail.
rngGroup.Cells(1).Group Periods:=Array(False, False, False, True, True, True, False)

'to ungroup:
'rngGroup.Cells(1).Ungroup


End Sub

我想补充一点,我花了几个月的时间才找到句号的确切定义。以为我会分享...

于 2018-08-03T19:43:08.080 回答