2017-09-17 9 views
0

VBAステートメントのWorksheets.Calculateに興味があります。関数が同じブック内の別のシート上のセルを参照しているときに、Evaluateステートメントを使用してカスタム関数で正しく機能しないように見えます。VBAワークシート。計算が他のシートの式を参照して評価されていません。

Sheet1では、私は列Aを平易な数字で示しています。

のSheet2同じワークブック列CはA1 + A2のように列A細胞上の基本的な表現などがあり

に私はVBAモジュールに

Function MyEval(Val1 As String) 
    Application.Volatile 
    MyEval = Evaluate(Val1) 

End Function 

をこのカスタム関数を持っていると私が言うには、この式=MyEval(Sheet2!C1)を置きますB1をSheet1にドラッグしてドラッグします。 これは初めて正常に動作します。 Sheet2のExpressionを取ります:C1はMyValに渡し、insideは結果を評価して返します。

問題は、Sheet2の文字列式を編集する瞬間です。この式全体が0を返します。再計算するには、Sheet1のF9キーを押す必要があります。

私はApplication.VolatileをMyValに、Worksheets("Sheet1").CalculateをSheet2のワークシート変更イベントに入れました。

まだ動作しません。それを動作させる唯一の方法は、Sheet1のF9キーを押すことです。

これが期待どおりの動作ですか?私は何かが欠けている。評価シートを使用してVBAでカスタム式を作成する方法ワークシートの変更イベントが発生し、数式が別のシートの範囲を参照しているときに再計算しますか?

参照が同じシート内にある場合は問題ありません。それはうまく動作します。私はExcel 2013を持っています。ありがとう。

Screenshot

答えて

2

問題は、あなたのコードは、アクティブシートのコンテキストで動作しますApplication.Evaluateを呼び出していることです。機能がオンになっているシートのコンテキストで評価したい場合は、

Function MyEval(Val1 As String) 
    Application.Volatile 
    MyEval = Application.Caller.Worksheet.Evaluate(Val1) 

End Function 
+0

大変ありがとうございます。この方法は正しく機能しました。 – rajeev

+0

VBA開発者が常に気づいておく必要がある資格認定の説明 – MacroMarc

関連する問題