テーブルのデータを消すときの注意点(失敗談)
テーブルのデータを消そうとして、失敗した時のお話。
先日から登場している、このテーブルを例に説明する。
このデータを綺麗に消したい時、一番手っ取り早いのは、例えばこんなやり方だ。
Sub test() ActiveSheet.ListObjects(1).DataBodyRange.Delete End Sub
アクティブシートの、ListObject(=テーブル)の塊(なので複数形のsが付き)の一つ目の(つまり(1))、データが入った範囲(=DataBodyRange)を削除(Delete)する。
※今回は、たまたま一つ目のテーブルだったので、ListObjects(1)となっている。
※二つ目のテーブルだったら、ListObjects(2)となる。
このとおり、きれいに消える。
では何が失敗なのか。
この状態でもう一度同コードを実行すると、エラーになるのだ。
何が悪くて怒られているのか、最初は良く判らなかった。
どうやら、データが無い状態でDataBodyRangeを消そうとしたのがNGらしい。
一方、一度でも↓このように何か入力して、
Deleteキーで入力情報を削除した場合はどうか。
この場合は、エラーにならない。見た目は同じなだけに、厄介だ。
結局あれこれと弄ってみて、これに落ち着いた。
Sub test() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) If Tb.ListRows.Count > 0 Then Tb.DataBodyRange.Delete End If End Sub
ListRowsコレクションの数を数えて、1つでもあればDataBodyRangeを削除する方式だ。先のように一度でも何か入力した時点でレコードが作成され、Deleteキーで内容を消したとしても、レコードを消したことにはならないらしい。
他にも良い方法があるかも知れないけれど、当面はこれで乗り切るとします。
参考まで。