运行时错误-2147417848(80010108)禁用报告的FilterOn属性时(Run tim

2019-09-25 18:35发布

我正在创建包含在子窗体容器myReport的过滤选项。 我用在这个问题描述的解决方案: 过滤报告

从HansUp。 使用所描述的代码过滤器成功创建,存储并与apllyFilterButton的OnClick事件施加。

然后,我创建disableFilterButton和OnClick事件,我把代码中提到的前线程建议。 测试时,我得到这个错误:

“运行时错误 '-2147417848(80010108)':

对象的方法“FilterOn“_Report_myReport”失败”

如果我使用的是Access功能区(on / off开关滤波器按钮)启用/禁用过滤器一切正常,没有错误。 所以,我的错误可能很简单,即使是在语法,但我不能找到源头。

码:

Private Sub disableFilterButton_Click()
Forms![myForm]![myReport].Report.FilterOn = False
Forms![myForm]![myReport].Report.Filter = ""
Forms![myForm]![myReport].Requery
End Sub

空难发生后,使用“调试”选项中,代码的第一行上述被高亮显示。 在这里和周围的净我的研究建议增加“空白过滤器”行,也注册表问题或代码的现有循环,造成死机。 但由于使用色带按钮一切正常,我认为它简单的东西,我很想念。 我还是一个初学者。

在myFilterButton用于创建过滤器的代码没有完全完成,但应工作:

Private Sub applyFilterButton_Click()

Dim ctl As Control
Dim varVyber As Variant
Dim filtrVolba As String
Dim filtrUplny As String

'Criteria creation for filter SQL
 Set ctl = Forms![myForm]![filterOptionOne]
 If ctl.ItemsSelected.Count <> 0 Then
    For Each varVyber In ctl.ItemsSelected
    filtrVolba = filtrVolba & ctl.Column(0, varVyber) & """ OR (sourceQuery.sourceColumn) = """
    Next varVyber

filtrVolba = Left$(filtrVolba, Len(filtrVolba) - Len(" OR (qry_sourceQuery.sourceColumn) = "))
    Forms![myForm]![myReport].Report.Filter = "(((sourceQuery.fieldBoundToMyReport)=[Forms]![myForm]![TextBoxBoundToMyReport]) AND ((sourceQuery.filterOptionOneSourceField) = """ & filtrVolba & "))"
 Forms![myForm]![myReport].Report.FilterOn = True

Else

MsgBox "Not yet"
End If
End Sub

帮助将非常感激! 托马斯

Answer 1:

托马斯,

由于所有在您的示例代码是在myForm的课,让我解释一些访问编码基础知识。

  1. [Forms]![Form]![Control]语法真正用于查询,窗体和报表事件和性能,和宏。 而在VBA有效,有这个语法没有编译时验证! 因此,一个VBA一行:

     varValue = [Forms]![Blah]![BlahBlah] ' doesn't exist 

    将编译好的,但在运行时失败。

  2. 在类模块的表单控件成为窗体类的公共成员。 把你的表单myForm的 :你可以用指它的控制代码:

     varValue = Form_myForm.filterOptionOne.Value 

    Form_myForm是窗体类的名称。 如果这行代码抛出错误filterOptionOne被重命名或删除。

  3. 在任何VBA类, Me指的是类的公共接口。 “公共接口”仅仅意味着所有在类中定义的公共职能,子程序和性能。 所以,如果你使用的内myForm的上面的代码行,最好的风格是这样的:

     varValue = Me.filterOptionOne.Value 

    Me在此上下文约束filterOptionOne在类实际定义,提供了进一步的编译时检查。

所以,在这三点的光,我会重构像这样的代码:

Private Sub disableFilterButton_Click()
     Me.myReport.Report.FilterOn = False
     Me.myReport.Report.Filter = ""
     Me.myReport.Requery
End Sub

同样:

Private Sub applyFilterButton_Click()

    Dim ctl As Control
    Dim varVyber As Variant
    Dim filtrVolba As String
    Dim filtrUplny As String

    'Criteria creation for filter SQL
    Set ctl = Me.filterOptionOne
    If ctl.ItemsSelected.Count <> 0 Then
        For Each varVyber In ctl.ItemsSelected
            filtrVolba = filtrVolba & ctl.Column(0, varVyber) & """ OR (sourceQuery.sourceColumn) = """
        Next varVyber

        filtrVolba = Left$(filtrVolba, Len(filtrVolba) - Len(" OR (qry_sourceQuery.sourceColumn) = "))
        Me.myReport.Report.Filter = "(((sourceQuery.fieldBoundToMyReport)=" & Me.TextBoxBoundToMyReport.Value & ") AND ((sourceQuery.filterOptionOneSourceField) = """ & filtrVolba & "))"
        Me.myReport.Report.FilterOn = True
    Else
        MsgBox "Not yet"
    End If

End Sub

这可能不会解决所有的问题,但这应该把你放在一个更为坚实的基础理解如何代码访问形式。



文章来源: Run time error -2147417848 (80010108) when disabling FilterOn property of Report