微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用VBA在Excel中正确添加表格列?

如何解决如何使用VBA在Excel中正确添加表格列?

问题:使用VBA将列添加到多个工作簿中的表时,我收到间歇性结果。有一次,我收到超出范围的错误。有时会添加所有新列,但大多数情况下只会添加一些新列,并将其余的列标题带到下一行而不是创建列。

要做什么:我正在尝试向现有表中添加7列,然后将数据添加到引用每一行中现有表数据的那些列中。

我尝试过的事情:我尝试了不同版本的代码

在循环添加数据之前,我在开始时添加了此代码。此代码错误带有“脚本超出范围”错误。它将添加前两列,将第三列名称添加到第一行的第一个单元格,然后在尝试添加第四列时出错。 tblCols 变量是添加新列之前所有表列的计数。

Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 1).Name = "Transaction Name In"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 2).Name = "Transaction Name Out"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"    
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 4).Name = "Inbound Path and File"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 5).Name = "Outbound Path and File"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 6).Name = "Lookup Tables"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 7).Name = "Logical Path"

大多数情况下,如果我使用下面的代码并简单地添加新数据,则简单地添加此数据将强制创建新列,然后使用循环后的代码命名标题。但是,这也不总是可行。我不会收到错误,但是最后几个列标题将被写入第一行,而不是被创建的列。循环代码没有任何问题。

    Dim x As Long

For x = 1 To tblRows
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 1)) = CreateTransInName(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 2)) = CreateTransOutName(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 3)) = CreateBatchMapName(x)
    
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 4)) = CreateInboundpath(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 5)) = CreateOutboundpath(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 6)) = copyLookupTables(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x,(tblCols + 7)) = CreatelogicalPath(x)
Next

DoEvents

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 1) = "Transaction Name In"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 2) = "Transaction Name Out"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 4) = "Inbound Path and File"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 5) = "Outbound Path and File"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 6) = "Lookup Tables"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 7) = "Logical Path"
MsgBox "Naming Convention Completed"

如果有人有建议,我愿意接受。我对第一段代码真的有些困惑,无法正常工作。

解决方法

您可以在这些行中使用一些东西来添加列。将所有列名称放入一个字符串数组中,然后遍历所有项,然后随便添加。

Public Sub AddColumnsToTable()

Dim ColumnHeaders(1 To 3) As String
Dim col As ListColumn
Dim i As Integer

ColumnHeaders(1) = "Hello"
ColumnHeaders(2) = "This is"
ColumnHeaders(3) = "A new column"

For i = 1 To 3

    Set col = Me.ListObjects(1).ListColumns.Add
    col.Name = ColumnHeaders(i)

Next i

End Sub
,

更正了我的复制/粘贴错误,将第一段代码的第3行上的HeaderRowRange替换为ListColumns.Add。我发布的第一段代码是添加列的正确方法。我只是犯了一个错误,幸好有人发现了它。

更改此内容

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"

对此:

Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 3) = "Batch Map Name"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。