在Access

时间:2015-08-19 15:19:05

标签: vba ms-access access-vba

我有一个报告,其中包含一些代码,可以对计算列进行排序,因此当用户点击标签时,报表就会被排序,这是代码:

Private Sub Label44_Click()

If Me.OrderBy = "IIf([SumOfCurrentPriceVol]<>0,([SumOfOfferedPriceVolume]-[SumOfCurrentPriceVol])/[SumOfCurrentPriceVol],0) DESC" Then
    Me.OrderBy = "IIf([SumOfCurrentPriceVol]<>0,([SumOfOfferedPriceVolume]-[SumOfCurrentPriceVol])/[SumOfCurrentPriceVol],0) ASC"
Else
    Me.OrderBy = "IIf([SumOfCurrentPriceVol]<>0,([SumOfOfferedPriceVolume]-[SumOfCurrentPriceVol])/[SumOfCurrentPriceVol],0) DESC"
End If

Me.OrderByOn = True
End Sub

当我单独使用报告时,它工作正常。但是,如果我将报告放在表单中,我会收到以下错误消息:

"Run-Time Error '5': Invalid procedure call or argument"

Me.OrderByOn = True

我尝试将Me更改为Report,我得到的结果相同。什么可能失败的想法?

1 个答案:

答案 0 :(得分:0)

我能够重新创建这个问题。这不是您可能想要添加到记录源的复杂计算。我用一个简单的单个字段重新创建它。这是我发现的:

(抱歉,我似乎无法在此处上传图片;这是不幸的)

检查报告属性的[数据]标签,然后查看Order By On Load。它可能设置为是。这意味着你不需要打开它,因为它已经打开了。

但与此同时,OrderBy的默认值为Null。报告会告诉您OrderByOn = False如果OrderBy中存在空值,尽管Order By On Load为真!

所以基本上,您需要在属性中设置默认OrderBy,在OderBy事件中设置默认Report_Activate(),或者更新代码以查找/一次空值。

为什么你的代码在报告中工作,但子报告不是一个谜;也许是一个bug。我能够通过执行上述3个建议中的任何一个来解决问题。

哦,不要忘记删除Me.OrderByOn = True,因为这是导致问题的原因......某种半烘焙的只读错误只在子报表中触发。