2017-08-30 6 views
1

VBAを使用してExcelのテーブルに新しい行を追加しようとしています。これは比較的単純ですが、通常の "ActiveSheet.ListObjects(" Table1 ")。ListRows.Add"を使用しようとすると、 "これは動作しません。私はなぜこのエラーが発生しているのか理解しています(なぜなら、新しい行は、以下の表が分かれるような方法でセルを移動させるからです)。VBAを使用してExcelテーブルに新しい行を追加すると、その下に異なる幅のテーブルがある場合

このテーブルに行を追加するには、好ましくは行全体が追加されるような方法でテーブルを水平にすることはできません。私はいくつかのコードを書いてきましたが、新しい行が追加されていますが、AutoFormatが有効になっていることに依存しています。また、多数のテーブルを扱っているときには、スクリーンショットはちょうど私が作ったダミーファイルからのものです)。

私がこれをやろうとしている理由は、同じ名前のリストで横の長さが異なるテーブルがいくつかあり、すべてのテーブルに新しい名前を追加するマクロを作成しようとしているからです。私もテーブルのサイズを変更することで実験しましたが、それはうまくいかなかったようです。以下のスクリーンショットとコードをご覧ください。

ありがとうございます。

Sub AddName() 

Range("Table1").EntireRow(Range("Table1").Rows.Count).Select 
Selection.Offset(1, 0).Select 
Selection.EntireRow.Insert 
Selection.Offset(-1, 0).Copy Destination:=Selection 
Selection.ClearContents 
Selection.Cells(1, 1).Value = Name 

End Sub 

http://i.imgur.com/a/1WGSI

+0

挿入しているテーブルの右にある下のテーブルを移動するか、別のシートに移動すると問題が解決しますか? –

+0

マークとの同意。この種の問題の原因であるテーブルの配置を最初に扱うのが最善でしょう。あなたのテーブルをこのように配置しなければならない特別な理由がない限り、(手動でも)データを追加しようとするときは必然的に問題が発生します。彼らは動かなければならないと言っているわけではありませんが、それは確かに一般的に問題を複雑にします。 –

+0

残念ながら、この場合のテーブルの移動は実際には不可能です。 – Jakub64

答えて

1

このコードは、最初ListObjectの下に新しい行を追加し、テーブルのサイズを変更:コースの

With ActiveCell.ListObject 
    ActiveSheet.Rows(.HeaderRowRange.Row + .ListRows.Count + 1).insert 
    .Resize (ActiveSheet.Range(.HeaderRowRange(1, 1), Cells(.HeaderRowRange.Row + .ListRows.Count + 1, .ListColumns.Count))) 
End With 

をあなたはこれがあること、テーブルのために働く、適切なオブジェクトとActiveCell.ListObjectActivesheetを交換する必要がありますアクティブセルが含まれています。

+0

多くのおかげで、私の場合は完璧に動作します! – Jakub64

0

このコードで試してください。

Sub AddName() 
    Dim NewRow As Range 
    Set NewRow = Range("Table1").EntireRow(Range("Table1").Rows.Count).Offset(1,0) 

    'Excel will include the newrow into table automaticlly 
    NewRow.Cells(1, 1).Value = "newvalue" 
End Sub 
+0

あなたのコードで暗黙の 'ActiveSheet'参照に注意してください。これは、アクションのターゲットとなる「ActiveSheet」に依存し、不正なシートがアクティブな場合には失敗します。 –

+0

あなたのコードが何をしているのか、なぜそれが助けになるのか説明してください。あなたの提案は他人を助けるかもしれませんが、それは* How *の動作と* Why *が元のコードより優れているという説明と同じくらい有用です。 –

0

テーブルが同じ数の列を保持することがわかっている場合は、簡単な回避策があります。より多くの列を持つ表がより少ない列を持つ表の上にくるように、表を垂直に整列させるだけです。

たとえば、3,4,5,5、および6の列を持つ5つの表がある場合は、上部に6列、下部に5列の2つの表、4を持つ表それらの下にある列、および下に3列の表があります。それは問題を解決するはずです。

なお、このバグは、ListColumnsを、同じシート上にあり、さらに多くの行を持つ別のテーブルの左側にあるテーブルに追加しようとしたときにも発生します。

関連する問題