0

已在此处回答的问题的第二部分 First Part Of Question

我有一个工作表,其中包含一个表,该表有一些代码可以在需要时添加列。这工作得很好(感谢本网站上的答案),但在代码中它引用了表名(在这种情况下,它是一个名为“Labour”的表)。工作表也是一个空白模板,它再次包含一些代码,用于复制整个工作表并将其粘贴到工作簿的末尾以用于下一个新任务。

我现在遇到的问题是,由于我在模板工作表上有一个表格,当工作表复制到新工作表时,表格名称会发生​​变化(即,如果它是 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

如您所见,表名“Labour”在代码中

Set oList = oSh.ListObjects("Labour")

因此,在新工作表上添加新列时出现错误(因为新工作表上不存在表 Labor)。

4

1 回答 1

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

我留下了这个,以防它可以帮助其他人。

于 2018-01-22T09:04:25.207 回答