在Microsoft Access 2010中,如何在报表中引用绑定控件?

时间:2011-06-11 21:19:00

标签: ms-access vba

我正在创建一个报告,在具有多个子报告的客户端上显示数据,以显示按财务季度进一步细分的不同人口统计数据。例如,我在客户端主要语言上的子报表有一个组合框控件来创建详细信息部分中的行;控件绑定到我的语言选择表(我不确定这是否相关,但我使用自动编号作为语言选择的主键,而不是语言本身的名称作为键。我可以改变它,但如果需要)。对于列,我为每个财务季度创建了一个标签。我正在尝试做的是在这个绑定控件中的每个语言选择,我需要它来查看哪些客户说这种语言,看看它们何时首次被分解为适当的财政季度,并显示在适当的盒子。

在其他子报表中,如按财务季度细分的新客户的性别,很容易。只有M / F所以没有必要让它可扩展,所以我只用标签/矩形创建了两行,并使用一些VBA来引用收集我的客户数据的查询。该查询查看它们何时首次提供,并且我编写了一个函数来返回它们属于哪个财政季度(注意:业余编码提前= D)

Public Function FiscalQuarter(InputDate As Date) As Integer

Dim ReportMonth As Integer
Dim ReportDay As Integer
Dim ReportYear As Integer
Dim FiscalYear As Integer


'''!!! Break up Current Date !!!'''
ReportMonth = Month(InputDate)
ReportDay = Day(InputDate)
ReportYear = Year(InputDate)

' Quarter 1
    If ReportMonth = "9" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "10" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "11" Then
        FiscalQuarter = 1
        FiscalYear = ReportYear + 1
    End If

' Quarter 2
    If ReportMonth = "12" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear + 1
    End If
    If ReportMonth = "1" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear
    End If
    If ReportMonth = "2" Then
        FiscalQuarter = 2
        FiscalYear = ReportYear
    End If

' Quarter 3
    If ReportMonth = "3" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If
    If ReportMonth = "4" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If
    If ReportMonth = "5" Then
        FiscalQuarter = 3
        FiscalYear = ReportYear
    End If

' Quarter 4
    If ReportMonth = "6" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If
    If ReportMonth = "7" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If
    If ReportMonth = "8" Then
        FiscalQuarter = 4
        FiscalYear = ReportYear
    End If

End Function

然后在ClientGender报告中,我使用了以下代码:

MaleFirstQ = DCount("MinOfEventDate", "qryQRChildDemographics", "FiscalQuarter([MinOfEventDate])=1 And [Gender]='M'")
MaleFirst.Caption = MaleFirstQ

对于每个性别/季度框,我都有类似上面的代码片段以分配给标题。

所以我的问题是我无法引用报告中绑定控件中的值,以便在我的财务季度细分中使用。我试图使用类似于我已经使用的Dcount,除了我试图使用绑定控件的引用作为标准,我不断得到不同的运行时错误,说我引用了一个没有的控件或属性存在。

我会承认我有点像新手,我喜欢通过玩弄它来自己搞清楚事情,但我完全陷入困境。我一直在慢慢阅读Microsoft Access 2010圣经,Microsoft Access 2010深度和Wrox Microsoft Access 2010程序员参考(刚开始这一本)书籍,但到目前为止我还没有找到我认为我需要的东西。我有一种感觉,我对这项任务的处理是完全错误的,所以如果有人能指出我正确的方向,我正在忽略的东西以及使用什么工具我会非常感激!


我尝试了几种不同的方式,但它们都与此类似,第二个标准略有变化:

LanguageFirst.Caption = DCount("PrimaryLanguage", "qryQRChildDemographics", "FiscalQuarter([MinOfEventDate])=1 AND Me!LanguageField")

生成运行时错误2471 它不喜欢Me!LanguageField。

我也尝试过这个作为第二个标准:

[PrimaryLanguage]=Me.Controls!LanguageField

我想,因为我可以使用函数作为标准,我也应该能够使用字段的值,但我开始认为Dcount在这里使用可能不是正确的。

3 个答案:

答案 0 :(得分:2)

我真的不明白你的问题是什么,因为你已经抛出了很多信息,我无法做出正面或反面,但我有这两条评论:

  1. 组合框不属于报告。它们是UI对象,用于编辑,并且无法编辑报告(虽然我猜A2010有可能在报告中编辑数据,我不建议这样做)。相反,您应该使用表,该表是子报表的记录源中组合框的基础。

  2. 当您使用文本框时,您正在使用标签。当你编码时:

    LanguageFirst.Caption = DCount(“PrimaryLanguage”,“qryQRChildDemographics”,“FiscalQuarter([MinOfEventDate])= 1 AND Me!LanguageField”)

  3. ...您正在为标题分配数据。相反,删除标题并将其替换为一个文本框,该文本框的ControlSource为DCount()公式。您还需要调整WHERE子句,因为在DCount()中不能有Me!LanguageField(实际上我看不出它在任何上下文中是如何工作的。)

    如果您执行上述操作(即,用文本框替换正在编辑其标题的标签),则会失去在VBA中编写内容并在正确的事件中获取代码等问题。

答案 1 :(得分:1)

尝试第三个参数:

"FiscalQuarter([MinOfEventDate])=1 AND [PrimaryLanguage] = " & Me!LanguageField.Value

你应该构建一个字符串,但是如果你将Me!LanguageField放在引号内,那么它就像文本一样。

答案 2 :(得分:1)

这不是您的问题的答案,但它不如评论那么好。由于您刚刚开始使用VBA,请查看您是否更喜欢这种方法用于FiscalQuarter功能。

Public Function FiscalQuarter(InputDate As Date) As Integer

    Select Case Month(InputDate)
      Case 9 To 11 ' Quarter 1
        FiscalQuarter = 1
      Case 1, 2, 12 ' Quarter 2
        FiscalQuarter = 2
      Case 3 To 5 ' Quarter 3
        FiscalQuarter = 3
      Case 6 To 8 ' Quarter 4
        FiscalQuarter = 4
    End Select

End Function