2017-01-16 2 views
0

に基づいて機能が揮発してください私はListObjectsのために、特にこのような状況では、ユーザー定義されたスタイルのオプションに対して検証UDFを作成しようとしているが、私は普遍的な答えを期待していました。表1は次のようエクセルVBAは、ユーザが選択したスタイルのオプション

私のUDFは、デモの目的のために、我々は、セルA2にあるされています:関数が結果を返す

=TableHeaderExists("Table1") 

は例のテーブルを取る

Public Function TableHeaderExists(table_name As String) As Boolean 

    TableHeaderExists = ThisWorkbook.ActiveSheet.ListObjects(table_name).ShowHeaders 

End Function 

A2結果を返します。しかし、ユーザーが条件を変更すると、 'デザインタブ'のチェックボックスをオフにしても再計算されません。

だから私は、関数にApplication.Volatileを追加しました。

A2は、まだ再計算しません。そこで、Application.Volatileを削除して、ActiveSheet.Calculateを追加しました。

この場合、1回の変更と1回の変更のみで動作します。私は、テーブル内のデータを編集した場合、私は予告をした何

は、任意のデータは、すべて、バリデーション機能を備えたこれらの細胞は、その後、再計算されますが、スタイルオプションが変更されていないとき、あります。

だから私はその後ない外観、ヘッダーのために、あまりにも身体データが何らかの形で変更されただけで、更新した後、単に「ShowHeaders」に対して、検証と同じように動作する範囲に対して検証することによって、結果を取得しようとしました:

Public Function TableHeaderExists(table_name As String) As Boolean 

Dim tbl As ListObject 
Dim hdrRng As Range 

Application.Volatile 

Set tbl = ActiveSheet.ListObjects(table_name) 
Set hdrRng = tbl.HeaderRowRange 

If Not hdrRng Is Nothing Then 
TableHeaderExists = True 
Else 
TableHeaderExists = False 
End If 

答えて

0

私はそれが仕事に行くのではありません怖いです:計算イベントがトリガーとさ

  • :とき

    のUDFのみを計算します

  • UDFのパラメータのいずれかが汚れを取得またはUDFが では、UDFは計算されませんので

がデザイン]タブのチェックボックスを変更すると、計算をトリガーしないなどの揮発性フラグが立て。

+0

それはあなたがそれを説明する方法を意味します。あなたは、なぜ「計算」が再計算を強制するのか理解するのを手伝ってもらえますか?さらに、なぜレンジオブジェクトに対する小切手と残高が望ましい結果をもたらさないのでしょうか?トリガーしないチェックボックスを理解することはできますが、範囲がない場合はどうなりますか?私はそれに従っていない – soulshined

+0

UDFの中に.Calculateを追加すると、なぜあなたのためにrecalcが強制されるのか分かりません。 Recalcは物の視覚的な外観の変化によって引き起こされることはありません。 –

+0

申し訳ありません。私は最後の会話以来仕事をしてきました。私はそれを複製することができませんでしたが、データボディの範囲の値が変更されたときはいつでもチェックボックスから更新されますので、範囲内のセルを挿入/削除するか、単に編集するだけでよいでしょう。私の2番目の例が範囲と照合して結果を出さない理由はまだ分かりません。しかし、助けてくれてありがとう – soulshined

関連する問題