2017-08-30 17 views
1

我想在Excel中使用VBA將一個新行添加到表格中。這是相對簡單的,但是如果我嘗試使用通常的「ActiveSheet.ListObjects(」Table1「)。ListRows.Add」,那麼我得到一個錯誤,指出「這不起作用,因爲它會移動表格中的單元格工作表「。我明白爲什麼我會得到這個錯誤(因爲新的一行會移動單元格,使得下面的表格會分開)。使用VBA在Excel表格中添加一個新行時,當其他表格的寬度不同時,使用VBA

那麼,有沒有一種優雅的方式來添加一行到這張表,最好是以這樣的方式添加一個整行(沒有數據需要從表中水平擔心)?我寫了一些我寫的代碼,增加了一個全新的行,但它依賴於啓用了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 *它的工作原理和*爲什麼*它比原始代碼更好。 –

0

如果您知道這些表格將保持相同數量的列,則可以使用簡單的解決方法。只需垂直排列表格,使具有更多列的表格位於具有較少列的表格上方。

所以如果你有5個表格(例如)3,4,5,5和6列,把表格放在最上面的6列,下面5列的兩個表格,4以下的列和底部有3列的表格。這應該解決問題。

順便提一句,當您嘗試將ListColumns添加到位於同一工作表+另一個具有更多行的表的左側的表中時,也會發生此錯誤。

相關問題