好的,互联网上绝对没有好的文章可以解释或有关于如何使用 VBA 创建数据透视图的代码示例。我需要这个,因为我需要数据透视图根据表单中的用户选择显示不同的结果。Excel 有一些,但 Access 的语法不同。我知道这是一个蹩脚的问题,但如果有人有如何在 VBA 中创建数据透视图的示例,我将非常感谢您的帮助。
2 回答
经过大约 3 天的搜索,我想我找到了它。没有人真正关心,这只有 6 个视图,这说明了 VBA 的完全可怕性。无论如何,MSDN 将其隐藏在“Office XP”下而不是 Access 下,但无论如何。
我在 Access 2007 中创建了一个数据透视图表单。在另一个表单上,我有用户选择控件和数据透视表作为子表单。然后我在主窗体中使用这样的代码。对象模型与 OWC11(Office Web Components 11)相同。
Private Function DisplayChart()
With mysubform.Form.ChartSpace
.Clear
.AllowFiltering = True
.HasChartSpaceTitle = True
.ChartSpaceTitle.Caption = "test"
.DisplayFieldButtons = False
.DisplayToolbar = False
.ConnectionString = ...
.CommandText = "SELECT rSeries, rCategory, rDate, rValue " & _
"FROM myTable"
.Charts(0).Type = chChartTypePie
.SetData chDimSeriesNames, chDataBound, "rSeries"
.SetData chDimCategories, chDataBound, "rCategory"
.SetData chDimValues, chDataBound, "rValue"
.HasChartSpaceLegend = True
End With
End Function
常量可以从 OWC11 导出
C:\Program Files\Common Files\Microsoft Shared\Web Components\11\OWC11.DLL
您需要它们位于模块的顶部。在这个阶段,我不确定如何从 Access 数据透视图中提取它们。引用 OWC11 并将子窗体 ChartSpace 设置为声明为 OWC11.ChartSpace 的变量。编写代码后更改为“对象”类型,并删除后期绑定的引用(并重新测试)。这样,当您部署时,您的 refs 就不会卡在 64 位机器上。
Private Enum ChartConstants
chDimSeriesNames = 0
chDimCategories = 1
chDimValues = 2
chDataBound = 0
chAxisPositionValue = -8
chAxisPositionCategory = -7
chChartTypePie = 18
End Enum
请记住,您还可以让用户访问数据透视图属性表单、字段列表和拖放区。或者他们可以右键单击图表以找到它们。
(注意 - 这对我来说仍然是一个新发现,所以如果我发现任何问题,我会努力更新这个答案。)