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"
如果有人有建议,我愿意接受。我真的有点困惑,第一块代码不起作用。
解决方案
纠正我的复制/粘贴错误,用HeaderRowRange
第ListColumns.Add
一块代码的第 3 行替换是修复。我帖子中的第一个代码块是添加列的正确方法。我只是犯了一个错误,幸好有人抓住了它。
改变这个:
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"
对此:
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 3) = "Batch Map Name"
推荐阅读
- azure-active-directory - JetBrains DataGrip - Azure SQL - 与 Active Directory 连接 - 密码
- azure - 多用户远程桌面 Azure
- javascript - 如何保留选择默认选项
- java - 通过 REST 发送大型 zip 文件
- scala - 从列表中的映射中获取某些键使用 scala
- java - 更新到 Oreo 后 ListFile 为空
- ios - 使用 GPUImage 为视频添加水印,捕获错误,例如“试图过度释放帧缓冲区”
- javascript - JQuery 交换列
- javascript - rn redux-offline 删除请求数据/缓存
- wpf - 替代 ClickOnce 进行自动更新?