复制工作表时的表引用

时间:2018-01-22 08:44:50

标签: excel vba excel-vba excel-tables

这里已回答问题的第二部分 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")

因此,当在新工作表上添加新列时,我收到错误(因为新工作表上不存在“人工”表。)

1 个答案:

答案 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

我离开了这个以防万一它可以帮助其他人。