我正在尝试使用VBA向Excel中的表添加新行。这是相对简单的,但是如果我尝试使用通常的“ActiveSheet.ListObjects(" Table1")。ListRows.Add”然后我得到一个错误,说“这不会起作用,因为它会移动单元格在工作表的表格中。“我理解为什么我会收到此错误(因为新行会以下面的表格分开的方式移动单元格)。
那么,是否有一种优雅的方法可以在这个表中添加一行,最好是添加整行(没有数据可以从表中水平担心)?我有一些我编写的代码添加了一个全新的行,但是它依赖于启用了自动套用格式,而且当我处理大量表格时,它似乎也不能始终如一地工作(我的原始文件有很多,屏幕截图只是来自我制作的虚拟文件)。
我试图这样做的原因是我有一些表格具有相同名称但水平长度不同的表格,并尝试创建一个宏,为所有表格添加新名称。我也尝试过调整表的大小,但似乎从来没有很好地工作过。请参阅下面的屏幕截图和代码。
提前致谢。
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
答案 0 :(得分: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.ListObject
和Activesheet
,这适用于包含活动单元格的表。
答案 1 :(得分: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
答案 2 :(得分:0)
如果您知道表格将保持相同的列数,则可以轻松解决。只需垂直排列表格,以便具有更多列的表格位于表格上方,列数更少。
因此,如果您有5个表(例如)3个,4个,5个,5个和6个列,则将表格放在顶部有6列,两个表格下面有5列,表格有4列低于那些,以及底部有3列的表格。这应该可以解决问题。
顺便提一句,当您尝试将ListColumns添加到同一工作表上的表中以及另一个包含更多行的表的左侧时,也会发生此错误。