使用VBA将新行添加到Excel表中时,如果有其他宽度不同的其他表格

我正在尝试使用VBA将新行添加到Excel表中。 这是相对简单的,但是如果我尝试使用通常的“ActiveSheet.ListObjects(”Table1“)。ListRows.Add”那么我得到一个错误,说:“这将无法正常工作,因为它会移动表中的单元格工作表“。我明白为什么我得到这个错误(因为新的一行会移动单元格,使得下面的表格会分开)。

那么,有没有一种优雅的方式来添加一行到这个表,最好这样一个整行添加(没有数据从表中水平担心)? 我有一些我写的代码添加了一个全新的行,但是它依赖于被启用的AutoFormat,并且当我处理大量的表时(我的原始文件有很多,屏幕截图仅仅来自我制作的虚拟文件)。

我试图做到这一点的原因是,我有几个表与相同的名称,但不同的水平长度的列表,并试图创build一个macros,将添加一个新名称的所有表。 我也尝试调整表格的大小,但似乎从未如此。 请参阅下面的屏幕截图和代码。

提前致谢。

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 

View post on imgur.com

此代码首先在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 

当然你需要用适当的对象replaceActiveCell.ListObjectActivesheet ,这适用于包含活动单元格的表格。

试试这个代码。

 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 

如果您知道这些表格将保持相同数量的列,则有一个简单的解决方法。 只需垂直排列表格,使列数更多的表格位于列数更less的表格上方。

所以如果你有5个表格(例如3,4,5,5和6列),把表格放在最上面的6列,下面5列的两个表格,下面有4列的表格,和在底部的3列的表。 这应该解决这个问题。

顺便提一下,当您尝试将ListColumns添加到另一个具有更多行的表的左侧的表中时,也会发生此错误。