我在Excel中运行VBA代码以在单击按钮后构建表(ListObject)。 通过使用标题名称的集合动态添加列。 在构建表之前,现有表将被删除以避免错误。Excel VBA:向ListObject添加列而不向工作表添加列
使用ListColums.Add
的问题是,它会将列添加到整个工作表并将现有列向右推。所以每次点击按钮时,工作表将会有越来越多的列。这不是很干净。该按钮将非常频繁地按下,我想避免推动Excel工作表的限制。我构建功能的工作原理如下:
Function buildTable(wsName As String, tblName As String, clmns As Collection, Optional tableRange As String)
' * If Range is not specified choose "$A$1"
If IsMissing(tableRange) Then
position = "$A$1"
End If
' * Build the table based on the passed parameters
ThisWorkbook.Worksheets(wsName).ListObjects.Add(xlSrcRange, ThisWorkbook.Worksheets(wsName).Range(tableRange), , xlYes).Name = tblName
' * Declare and define tblName as ListObject in Worksheet wsName
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets(wsName).ListObjects(tblName)
' * Declare and define the columns of table tblName
Dim clmn As ListColumns
Set clmn = tbl.ListColumns
' * Replace the first column name with the first item in our column Collection clmns
tbl.HeaderRowRange(1, 1).Value = clmns.Item(1)
' * Now loop through the rest of the passed header name collection clmns. Start with 2, because 1 was already set in the last step
X = 2
For X = 2 To clmns.Count
' * Add Item X to the table (String from the passed collection clmns) as column.
clmn.Add.Name = clmns(X)
Next X
End Function
我会这样称呼它:
' * Declare and fill my Collection of headers
Dim clHeaders As New Collection
clHeaders.Add "MyFirstColumn"
clHeaders.Add "MySecondColumn"
clHeaders.Add "MyThirdColumn"
' * Call the builTable Function
Call buildTable("Sheet1", "MyTable", clHeaders)
我已经尝试过ThisWorkbook.Worksheets("Sheet1").Columns("AS").EntireColumn.Delete
,但这只是清空已经空栏,并不会删除它们..
有没有办法做到这一点,而不必在每次单击按钮时在工作表末尾添加更多列?
首先,您无法增加表单中的列数 - 它始终保持不变。其次,'EntireColumn.Delete'确实会删除整列的单元格,但和以前一样,列的总数将始终保持不变。 – Rory
啊谢谢你,你给我带来了正确的想法! – 30000MONKEYS