如何动态更改访问图表的Rowsource

时间:2014-02-06 04:04:24

标签: ms-access dynamic access-vba mschart ms-access-2003

我想知道是否有任何方法可以在运行时在报表中设置图表的rowsource属性。

我打算在报告的组标题部分中有一个图表。应根据组头的值更新此图表的行源。

我收到错误2455 - 当我尝试在VBA中执行此操作时对属性RowSource的无效引用。

我正在使用Access 2003。

谢谢。

2 个答案:

答案 0 :(得分:5)

我在网上搜索了一段时间后得到了灵感。这是我目前正在实施的解决方案。

首先,在运行时无法以编程方式更改图表的rowsource属性。但是,我们可以做的是将rowsource属性设置为Query对象,然后在VBA中更新此查询对象。

这是我的代码的一部分。

CurrentDb.QueryDefs("myQuery").SQL = "a new query"
Me.myChart.Requery

我已将图表的行源设置为名为“myQuery”的查询对象。我将上面的代码放在我的组头的Format事件中,因此每次加载组头时,我都可以使用组头的值来更新Query对象。

答案 1 :(得分:0)

另一种方法是打开表单或将图表嵌入报表分为两个步骤。在下面的示例中,我使用的是报表,但它与表单同样有效:

  • 第一步:在设计视图中以隐藏模式打开报表。现在的图表 可以编辑行源(因为您在设计视图中),但是 进程是不可见的(因为您处于隐藏模式)。
  • 第二步:保存并关闭隐藏的报表,然后在 “可见”模式
'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