在父级为表单的子报表中滚动

Scrolling in subreports where parent is a form

我在滚动窗体的 Sub Report/Form 控件中的报表时遇到问题。我可以通过单击并拖动滚动条来滚动,但我想使用鼠标滚轮。

我认为这 functionality was removed 是 2007 年到 2010 年过渡期间自然发生的事情。 (我知道链接说它适用于子表单,但我很确定它也适用于基于我读过的所有其他内容的子报表)。

我像这样修改了他们的解决方法代码

Private Sub Report_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
    Dim r As Long
    If Not Me.Dirty Then
        Do While r < Abs(Count)
            If (Count < 0) And (Me.CurrentRecord >= 1) Then
                DoCmd.GoToRecord , , acPrevious, 1
            ElseIf (Count > 0) then 'And (Me.CurrentRecord < Me.Count) Then 'This said Me.RecordSet.RecordCount but that was wrong. Also looking at the count here seems to just mess things up actually. 
                DoCmd.GoToRecord , , acNext, 1
           End If
           r = r + 1
        Loop
    End If
End Sub

但是当控件具有焦点时,这根本不起作用。显示 "June 2016" 的文本框是下图中具有焦点的内容。

在只有一个报表节 focus/no 控件具有焦点时工作得很好。 IE。当您单击报表宽度右侧的时。我不确定这个状态到底叫什么。

我不知道如何设置该部分以使 focus/take 焦点远离所有其他可聚焦控件。

编辑:

您可以通过以下步骤重现我尝试修复的场景(这是 Access 2010,但它应该适用于 Access 2013。我不能说 2016)

要防止子报表上的控件获得焦点,可以将它们全部设置为Enabled = No。这应该将重点放在部分上。

FWIW,我试图重现这一点,但对我来说,未绑定表单上的子报表(在报表视图中)永远不会用鼠标滚轮滚动。无论焦点在哪里。

Edit 有了 Report_MouseWheel 代码,它就可以工作了。为了测试目的,我用测试中的记录数 table 替换了 Me.Recordset.RecordCount

一般来说,我觉得做这件事很奇怪(将子报表放在窗体上)。

编辑2啊,明白了,分组。好的

我尝试在详细信息部分上方放置一个透明按钮,以防止禁用的控件不可点击,但这没有用。

我发现一个可行的解决方法是首先将报告封装在另一个(空)报告中,然后将嵌套报告作为 sub-report 添加到表单中。这样滚动似乎保持不变。

这种方法的一个问题是加载时间会受到影响。我发现它特别会减慢具有大量查询或大量数据的报告。

如果 MS 能解决这个滚动问题,生活会轻松很多。

如果有人知道更好的方法,我会洗耳恭听!