访问 - 未调用VBA Sub

时间:2011-09-07 04:16:27

标签: ms-access vba

我需要为用户提供一种方法,让他们从表中选择要显示的列。用户在表单中有一个组合框的列名,他们可以选择其中一个,然后点击一个打开报告的按钮。我写了一些代码,它根据用户的输入创建一个SQL查询,但它没有被调用。我已经尝试插入MsgBox语句,断言等,但它永远不会被调用。如果我使用宏代替,那将会运行,但不会运行...

Private Sub Report_Open(Cancel As Integer)
    Dim field As String
    Dim sqlQuery As String
    Dim ctl As Control
    ctl = "Forms![RuleGroupForm]![selectRuleFieldCombo]"

    field = "rules.[" & ctl & "]"

    ' E.g. if the field was "Source File", the final query should look like this:
    'SELECT overview.ID, relationship.rulesID, rules.[Source File], overview.[Rule Group], rules.RulegroupID
    'FROM (overview INNER JOIN relationship ON overview.id=relationship.id)
    'INNER JOIN rules ON relationship.rulesID=rules.ID
    'WHERE rules.[Source File] IS NOT NULL;

    sqlQuery = "SELECT overview.ID, relationship.rulesID, " & field
    sqlQuery = sqlQuery & ", overview.[Rule Group], rules.RulegroupID"
    sqlQuery = sqlQuery & "FROM (overview INNER JOIN relationship ON overview.id=relationship.id) "
    sqlQuery = sqlQuery & "INNER JOIN rules ON relationship.rulesID=rules.ID"
    sqlQuery = sqlQuery & "WHERE " & field & " IS NOT NULL;"
    Me.RecordSource = sqlQuery
    Requery

    debugText = "New SQL Query = " & sqlQuery
End Sub

感谢。

编辑:已解决,不知道如何回答自己的问题...

1 个答案:

答案 0 :(得分:1)

除了关闭和打开之外,还有一些事情需要检查,当你在Access中遇到奇怪的行为时。一种方法是查看表单或报表的属性表上的事件,在这种情况下Open是否仍然包含[Event Procedure] - 有时表单或报表可以包含代码,但事件未标记。在开发时,即添加表单,报告和代码时,定期运行Compact和Repair是个好主意,这也意味着定期备份 - 简单的复制可以节省很多麻烦。最后,开发相当规则的Decompiles是个好主意。我保留了一个小脚本,我可以删除Access文件来运行反编译。