2017-10-04 3 views
0

私の問題は説明が難しいので、私は画像を追加し、私のGoogleドライブ経由でサンプルのExcelファイルを共有しました。(VBA)カスタム関数が間違った入力でリフレッシュされますか?

機能の実行行Wのアイテムの合計価格と、ロー "Q"の合計価格の中の輸送費のパーセンテージ(いくつかの他のパーセンテージ行は異なるコスト項目に存在します。簡素化する)。 ここでは、個々のアイテム合計を合計します。

次に、行「Q」のすべてのパーセンテージに適用します。これにより、コストの合計がわかります。次に、行Wで除外して合計のコストパーセンテージを得ることができます。 私の例のファイルでは、すべてのサブパーセンテージは同じですが、異なる場合もあります。

以下の機能を持つ2枚のシートがあるときに発生する問題が発生します。何らかの理由で、機能が1つのシート上で更新され(そして正しい値を示す場合)、他のシート上の機能は混乱する。私が手動で更新したとき(「プレス入力」)、正しい値が表示されますが、前のシートに戻ると、その機能がそこそこに詰まっています...私は狂っています:( 私は、各シートの「Q」を参照して第三のシートを持っている場合と、私は1つが常に間違っている、それは同時に両方のシートの正しい値を表示するために取得することはできません。

Option Explicit 
Dim rCell As Range 

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

Excel Document

Picture

答えて

0

適格なワークシートオブジェクトがない場合、Range("W" & rCell.Row)は常に参照します常にあなたの関数を呼び出す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 
+0

ダンそれは、私はそれがActiveSheetを参照してください知っていたが、私は機能がそうでなければ、このような方法で呼び出すことができることを知りませんでした。ありがとう!! – Michu1

関連する問題