に基づいて機能が揮発してください私は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
それはあなたがそれを説明する方法を意味します。あなたは、なぜ「計算」が再計算を強制するのか理解するのを手伝ってもらえますか?さらに、なぜレンジオブジェクトに対する小切手と残高が望ましい結果をもたらさないのでしょうか?トリガーしないチェックボックスを理解することはできますが、範囲がない場合はどうなりますか?私はそれに従っていない – soulshined
UDFの中に.Calculateを追加すると、なぜあなたのためにrecalcが強制されるのか分かりません。 Recalcは物の視覚的な外観の変化によって引き起こされることはありません。 –
申し訳ありません。私は最後の会話以来仕事をしてきました。私はそれを複製することができませんでしたが、データボディの範囲の値が変更されたときはいつでもチェックボックスから更新されますので、範囲内のセルを挿入/削除するか、単に編集するだけでよいでしょう。私の2番目の例が範囲と照合して結果を出さない理由はまだ分かりません。しかし、助けてくれてありがとう – soulshined