访问表单:将自定义属性传递给图表

时间:2018-03-13 10:18:24

标签: forms ms-access access-vba

我正在构建一个表单,该表单应该显示一些聚合某些查询的直方图。由于访问对直方图没有本机支持,因此将SQL查询设置为每个图表的数据源相对冗长且重复。我们的想法是在xy-plot中手动绘制直方图中每列的所有角。目前,我通过以下查询实现此目的:

select
    bin(field,50,-1000,1000) - 25 AS bin,
    1 as cnt,
    3 as ord
FROM tab
GROUP BY bin(field,50,-1000,1000) - 25

union all

select
    bin(field,50,-1000,1000) - 25 AS bin,
    Count(*) AS cnt,
    4 as ord
FROM tab
GROUP BY bin(field,50,-1000,1000) - 25

union all

select
    bin(field,50,-1000,1000) + 25 AS bin,
    Count(*) AS cnt,
    1 as ord
FROM tab
GROUP BY bin(field,50,-1000,1000) + 25

union all 

select
    bin(field,100,-2000,2000) + 500 AS bin,
    1 as cnt,
    2 as ord
FROM tab
GROUP BY bin(field,50,-1000,1000) + 25

order by bin, ord

其中bin是一个VBA函数,它根据bin宽度和边界选择bin。您可能会注意到此查询中的分箱配置发生了八次。

我想将自定义属性添加到可在查询中引用的图表控件中。有谁知道如何实现这个目标?

备注:您可能会建议我可以使用其他控件来配置分箱。但是,我有很多这些图表,我想轻松添加具有单独binning的新图表。如果我有其他的binning控件,我也必须复制它并在SQL中调整它们的引用,我认为这不会减少工作量。

1 个答案:

答案 0 :(得分:1)

没有当前图表这样的东西,因为表单可以包含许多图表。但是,您可以识别表单上的所有图表,并使用它们执行特定操作:

Dim ctl As Control
For Each ctl In Me.Controls 'Or Forms!SomeForm.Controls
    If TypeOf ctl Is Access.ObjectFrame 'OLE object, can be chart
        If ctl.OLEClass = "Microsoft Graph Chart"
            'Do stuff with the ctl.Tag property
        End If
    End If
Next