这里已回答问题的第二部分 First Part Of Question
我有一个工作表,其中包含一个表,该表包含一些代码,可以在需要时添加列。这非常有效(感谢本网站上的答案),但在代码中它引用了表名(在这种情况下,它是一个名为'Labor'的表)。该工作表也是一个空白模板,它还有一些代码可以复制整个工作表并将其粘贴到工作簿的末尾,以便进行下一个新任务。
我现在遇到的问题是,由于我在模板工作表上有一个表格,当工作表被复制到新工作表时,表名称会更改(即如果它是table1,则在新工作表上将其命名为table2)。这反过来会停止用于将新列添加到新表中的代码。反正有没有让代码“知道”表格上的表格并使用它?
我可以让表名出现在单元格中,是否有办法使用它?
向表中添加列的代码是:
Sub AddNewColumn()
Application.ScreenUpdating = False
Dim oSh As Worksheet
Dim oList As ListObject
Dim str As String
Set oSh = ActiveSheet
Set oList = oSh.ListObjects("Labour")
With oList
.ListColumns.Add
str = .ListColumns(1).Name
Range("Labour[[#All],[Column16]]").Select
Selection.Copy
.ListColumns(.ListColumns.Count).DataBodyRange.PasteSpecial xlPasteAll
Application.ScreenUpdating = True
End With
End Sub
正如您所看到的,表名“Labor”在代码
中Set oList = oSh.ListObjects("Labour")
因此,当在新工作表上添加新列时,我收到错误(因为新工作表上不存在“人工”表。)
答案 0 :(得分:0)
废弃这个问题我想我已经弄明白了。我让VBA使用带有表名的单元格,因此可以使用变量。代码如下:
Sub AddNewColumn()
Application.ScreenUpdating = False
Dim oSh As Worksheet
Dim oList As ListObject
Dim tblName As String
Dim str As String
tblName = Range("B18").Text
Set oSh = ActiveSheet
Set oList = oSh.ListObjects(tblName)
With oList
.ListColumns.Add
str = .ListColumns(1).Name
Range(tblName & "[[#All],[Column16]]").Select
Selection.Copy
.ListColumns(.ListColumns.Count).DataBodyRange.PasteSpecial xlPasteAll
Application.ScreenUpdating = True
End With
End Sub
我离开了这个以防万一它可以帮助其他人。