VBA 根据唯一的列数据创建新的 WB 并将新的 WB 范围转换为表格

VBA Creating New WB based on unique Column data and converting new WB ranges to Tables

我过去发布了一个与此类似的问题,但出现了一个不同的问题。

在这里找到。

现有代码的工作原理:它为 A 列中的每个唯一值及其重复值创建一个新工作簿,其中包含所有关联的行数据。

除了当我尝试在 table 范围内使用它时,该代码非常适合我需要它做的事情。经过一些研究后,我意识到我所有的参考资料都不正确,无法在 table 上执行此操作。我正在研究如何做到这一点以长期解决我的问题。

作为短期替代方案,我一直在研究如何将每个新工作簿范围转换为 table,但无法弄清楚如何将其插入我现有的代码中。下面的示例是我想象它应该去的地方,但是在查看我在研究中遇到的其他示例时,我无法理解如何添加命令。

For Each ky In dic.keys
    ThisWorkbook.Sheets("DEMURRAGE INSTRUCTIONS").Copy
    Set wbN = ActiveWorkbook
    xSht.Range(xTitle).AutoFilter xCName, ky
    Set xNSht = Worksheets.Add(, wbN.Sheets(wbN.Sheets.Count))
    xSht.AutoFilter.Range.EntireRow.Copy xNSht.Range("A1")
    xNSht.Name = xNSht.Range("T2").Value
    ActiveWindow.DisplayGridlines = False
    xNSht.Columns.AutoFit

如果您有一个从 A1 开始的 headers 的连续范围,那么这应该可以将其转换为 ListObject/Table:

With xNSht.ListObjects.Add(xlSrcRange, xNSht.Range("A1").CurrentRegion, , xlYes)
   .Name = "Table1"
End with

将范围转换为 Table (ListObject)

  • 这将为工作表和 table 使用相同的名称。
  • 如果您需要复制整行,它将不起作用。
For Each ky In dic.keys
    ThisWorkbook.Sheets("DEMURRAGE INSTRUCTIONS").Copy
    Set wbN = ActiveWorkbook
    xSht.Range(xTitle).AutoFilter xCName, ky
    ' You have just copied a single worksheet to wbN hence:
    Set xNSht = Worksheets.Add(After:=wbN.Sheets(1))
    ' Why entire row? No need, unless there is data to the right!?
    With xSht.AutoFilter.Range
        .Copy xNSht.Range("A1")
        With xNSht.ListObjects.Add(xlSrcRange, _
               xNSht.Range("A1").Resize(.Rows.Count, .Columns.Count), , xlYes)
            .Name = xNSht.Range("T2").Value ' or some other table name?
        End With
    End With
    xNSht.Name = xNSht.Range("T2").Value
    ActiveWindow.DisplayGridlines = False
    xNSht.Columns.AutoFit