如何动态更改访问图表的行源
Posted
技术标签:
【中文标题】如何动态更改访问图表的行源【英文标题】:How to Dynamically Change the Rowsource of an Access Chart 【发布时间】:2014-02-06 04:04:24 【问题描述】:我想知道是否有任何方法可以在运行时在我的报表中设置图表的行源属性。
我打算在我的报告的组标题部分中有一个图表。此图表的行源应根据组头的值进行更新。
当我尝试在 VBA 中执行此操作时,我收到错误 2455 - 对属性 RowSource 的无效引用。
我正在使用 Access 2003。
谢谢。
【问题讨论】:
是的。有。你试过了吗? @david 是的,我以不同的方式尝试了几次。但是每当我尝试为 RowSource 属性赋值时,都会收到错误 2455 您可以用具有不同行源的新图表动态替换图表,但您建议的解决方案通常更好 【参考方案1】:在网上搜索了一段时间后,我得到了灵感。这是我目前实施的解决方案。
首先,确实不能在运行时以编程方式更改图表的行源属性。但是,我们可以将 rowsource 属性设置为 Query 对象,然后在 VBA 中更新此查询对象。
这是我的代码的一部分。
CurrentDb.QueryDefs("myQuery").SQL = "a new query"
Me.myChart.Requery
我已将图表的行源设置为名为“myQuery”的查询对象。我将上面的代码放在我的组头的 Format 事件中,所以每次加载组头时我都可以使用我的组头的值来更新 Query 对象。
【讨论】:
等价地,您可以使用本地表作为数据源,并为每个组/页面/项目/图表重新填充它。当您拥有大量基于复杂数据的简单子集的图表时,它尤其适用。根据报表设计,您可能不需要重新查询 - 在某些地方图表会自动重新查询 谢谢@david 我学到了一些新东西。【参考方案2】:另一种方法是分两步打开表格或报告嵌入图表。在下面的示例中,我使用的是报表,但它与表单一样好用:
第一步:在设计视图中以隐藏模式打开报表。现在图表 可以编辑行源(因为您在设计视图中),但 进程是不可见的(因为您处于隐藏模式)。 第二步:保存并关闭隐藏的报表,然后在 “可见”模式'report name
strReportmName = "SomeReportName"
'open report in design view but hidden
DoCmd.OpenReport strReportmName , acViewDesign, , , , acHidden
'edit chart RowSource
strSQL = "TRANSFORM Sum(Cabecas) AS SomaDeCabecas " & _
"SELECT Data "
...etc...
"PIVOT Categoria In (" & Chr(34) & strTitColunas & Chr(34) & ")"
'update chart RowSource
Reports![SomeReportName].Controls![SomeChartName].RowSource = strSQL
'Save report with edited RowSource
DoCmd.Close acReport, strReportmName , acSaveYes
're-open it in normal, visible mode
DoCmd.OpenReport strReportmName , acViewPreview
【讨论】:
以上是关于如何动态更改访问图表的行源的主要内容,如果未能解决你的问题,请参考以下文章