9

Excelテーブル(つまりListObject)の列に数式を手動で入力すると、オートコレクトはこの数式を列全体に適用します。

VBAを介してこの動作を制御する方法はありますか?つまり、この式を何らかの方法で変更/削除/追加できますか?

オブジェクトの数式を簡単に変更できることはわかっていListObject.ListColumns(1).DataBodyRangeますが、これにより、以前に手動で入力した値が上書きされますが、UIで数式を変更すると、これは変更されません...

4

2 に答える 2

19

ダグとbonCodigosのコメント/回答のおかげで、私は簡単な答えを見つけました:

ListObject.ListColumns("Column name").DataBodyRange.FormulaR1C1 = "new formula"

これにより、手動値が上書きされます(オートコレクトの通常の動作と同じです)。

于 2012-12-07T10:06:14.017 に答える
1

シートのスクリーンショットを見せていただければ最高です。それに基づいて、私たちは答えを明確にしたでしょう。

これが一般的な仮定です。一部のデータを列にダンプするリストオブジェクトが1つあり、その列の残りのセルは手動で操作されます。

最初に手動で次のことを試して、それがうまくいくかどうかを確認できます。それでも手動のものはコードレベルによって追い抜かれています、そしてあなたはコードレベルでこれをします。:)

ここでの主なアクションは、自動修正を停止することです

[移動]->[ツール]メニュー->[オートコレクトオプション]->[オートコレクト]タブ->

1-すべての自動修正を防ぐため

のチェックボックスをオフにしますReplace Text as you type

2-特定の修正を防ぐため

オプションの対応するチェックボックスをオフにします。後者、つまりリストオブジェクトを介してダンプする特定のデータ範囲にもっと興味があると思います。


これが、この機能をコードレベルで無効にするためのコードです。

Excelテーブル(ListObjects)を操作する場合、考慮すべき2つのオートコレクトオプションがあります。これら2つについて詳しく読むことができます。

* Apply new rows and columns in table 
  (VBA AutoCorrect.AutoExpandListRange Property)
* Fill formulas in tables to create calculated columns 
 (VBA AutoCorrect.AutoFillFormulasInLists Property) 

リストオブジェクトの上部で使用する可能性のあるコードは、

Application.AutoCorrect.AutoFillFormulasInLists = False

Application.AutoCorrect. AutoFillFormulasInListsそして、ListObjectレベルでテーブルごとに制御すると、はるかに便利になることに完全に同意します。したがって、ここに回避策があります。

したがって、1つの方法は、毎回テーブルデータをクリアすることです。また、データをクリアするときは、TABLETOFORGETフォーラムとフォーマットを確認できます。したがって、テーブルの内容を削除する前に、データ本体の範囲の内容をクリアします。

Sub forgetMe()
   With Sheet1.ListObjects("myTable")
      If Not .DataBodyRange Is Nothing Then
         .DataBodyRange.ClearContents
         .DataBodyRange.Delete
      End If
   End With

End Sub

データを入力するときは、自動入力をオフにして開始します。

于 2012-12-07T06:21:36.567 に答える