(VBA)自定义功能用错误输入刷新自身?

时间:2017-10-04 03:52:14

标签: vba excel-vba excel

我的问题很难解释,因此我添加了一张图片,并通过我的谷歌硬盘分享了示例excel文件。

该功能应该做什么:在行中有不同的项目总价格" W"和行中总运价的运输成本百分比" Q" (对于不同的成本项目,存在几个其他百分比行,这只是为了简化)。 现在我将各个项目总计相加。

然后,我将以下功能应用于行中的所有百分比" Q"然后应该给我总成本,然后我可以再按行排除" W"获得总成本的百分比。 在我的示例文件中,所有子百分比都相等,但它们也可能不同。

当我有两张具有以下功能的纸张时,会遇到我遇到的问题。由于某些原因,每当功能在一张纸上更新(并显示正确的值)时,另一张纸上的功能就变得一团糟。然后当我在乱搞功能上手动更新("按下输入")时,它显示正确的值,但是当我回到上一张纸时,该功能在那里搞砸了...我是快要疯了 : ( 并且,如果我有第三张参考" Q"在每张纸上,我永远无法让它同时显示两张纸的正确值,其中一张始终不正确。

{{1}}

Excel Document

Picture

1 个答案:

答案 0 :(得分:0)

如果没有合格的工作表对象,您的Range("W" & rCell.Row)将始终引用ActiveSheet,而ActiveSheet并不总是调用您的函数。

以下是修复它的一种方法:

Option Explicit


Function SUMSubCost(rRange As Range) As Double
    Application.Volatile

    Dim Total, rCell As Range
    For Each rCell In rRange
          If (Not IsEmpty(rCell)) And (Not IsError(rCell)) Then
               Total = Total + (rCell.Value * rCell.Worksheet.Range("W" & rCell.Row).Value)
          End If
    Next rCell
    SUMSubCost = Total
End Function