2016-03-19 17 views
1

コメントの有無を確認するUDFがあります。私はCFでこれを使用します。なぜなら、セルが1の場合に色付けしたいからです。セルは空白ではなく、2です。コメントはありません。これは2007年と2010年にうまくいきましたが、今は2016年ですが、Excelは私にとってはちょっと変わっています。Office 2016/Office 365のudfに関する条件付き書式設定

UDF:

Function HasCmt(Rng As Range) 
    Application.Volatile 

    HasCmt = IIf(Not Rng.Comment Is Nothing, True, False) 

End Function 

CF: = AND(NOT(ISBLANK(B6))、HasCmt(B6)= FALSE)

私は基準を満たしたときに今、フォーマットが適用され、それから再び去る。自動計算を無効にすると、再計算するまで正常に動作します。また、文書を保存する際にエラーが発生します。 '計算が不完全です...'。

誰でもこのCFを使用している多くのブックに適用できる修正を知っていますか? 2016年のExcelサービスで何か変わったのですか?

ご協力いただければ幸いです。

おかげ

+1

そのapplication.volatileは、ブックをかなりハードにする必要があります。また、実際には2つの基準を満たしているようには見えないので、ISBLANKを使用する必要があります。 2016年の問題を超えて、他の(より効率的な)方法を検討しましたか?厳密に言うと、.volatileは、コメントを受け取ったときにセルの状態を実際に変更することは何もしません。ワークブック内の何かが変更されたときにのみ、すべてのセルが再評価されます。 – Jeeped

+0

ありがとうJeeped。私はこれを達成するための別の方法は考えられません。特に、07年と2010年の間にそれが「うまく機能しました」 –

+0

UDFからapplication.volatileを削除し、ロジックをIf Not IsEmpty(rng)に変更してからHasCmt = CBool (rng.Commentは何もない) '。計算が自動に設定されている場合、UDFはCFルールで期待どおりに実行されました。これはExcel 2013にありました。少し後でExcel 2016をチェックします。 – Jeeped

答えて

0

ブック(またはアプリケーションインスタンス内の任意のブック)内の任意の揮発性関数は繰り返し計算イベントの呼び出しを生成し、UDFは、それ自体の上で実行されていたようです。条件付き書式は、揮発性関数と同じように、すべての計算サイクルで 'リフレッシュ'されます。 UDF内でApplication.Volatileメソッドを使用することは、さらに問題を複雑にしていました。

私は変更されたUDFのいくつかのバージョンを書いていましたが、安定版を入手した後、私はうまく機能するまでオーバーヘッドを取り除きました。

Option Explicit 

Function hasComment(rng As Range) As Boolean 
    'reports true for non-blank with a comment 
    Application.EnableEvents = False 
    If Not IsEmpty(rng) Then _ 
     hasComment = CBool(Not rng.Comment Is Nothing) 
    DoEvents 
    Application.EnableEvents = True 
End Function 

Function hasNoComment(rng As Range) As Boolean 
    'reports true for non-blank with no comment 
    Application.EnableEvents = False 
    If Not IsEmpty(rng) Then _ 
     hasNoComment = Not CBool(Not rng.Comment Is Nothing) 
    DoEvents 
    Application.EnableEvents = True 
End Function 

実質的に、Application.EnableEvents propertyは一時的に中断されます。これにより、揮発性関数が計算イベントを再トリガするのを制限します。 DoEvents functionは、繰り返し実行を一時的に中断し、アプリケーションメッセージキューに追いつくことを許可します。

これは、数百の揮発性関数を含むワークシート上の数百のセルをカバーする条件付き書式設定ルール内の主な機能としてよく機能します。

+0

これは素晴らしいですが、何らかの理由で私の細胞をフォーマットしていません。私も新鮮なWBを試しました。あなたのUDFを新しいモジュールに追加しました。私のCFは= hasNoComment(B2) –

+0

私はあなたに郵送することができますか?ありがとう –

+0

あなたのGmailに送信されました、ありがとう –

関連する問題