跨表复印时,结构化参考更改为绝对

时间:2016-11-25 23:49:24

标签: excel listobject structured-references

我有一个工作簿的怪物,我试图让那些在我之后使用它的人更容易管理。我按下大量的代码,按下按钮,使那些对Excel知之甚少的用户更友好。所以我需要帮助。

我有几张带有类似表格的表格。我的第一张纸包含客户信息的主列表并按下按钮,将此信息复制到另一张纸上,并对其进行分类,以便在各自的纸张上对这些客户进行分类。这允许我仅在第一张纸上输入新信息,并让它自动填充纸张以最大限度地减少人为错误。

为了减少很多错误,我在表格中使用了结构化引用。我最初并没有这样做,但我一直在努力改进这本工作簿。 无论如何,我在每个表中都有一个“Charge Type”列,并且总列将其引用为

    [@[Charge Type]]

这很好,考虑到客户会定期添加和删除,这可以减少错误。

但是,当此公式被复制到其他工作表之一时,它会转换为

    All_List[@[Charge Type]]

在sheet1上添加表的名称,即“All_List”。现在我想让它在新表的新表中特别引用“充电类型”一栏,我不能为我的生活弄清楚如何。

1 个答案:

答案 0 :(得分:0)

此解决方案使用变量来保存ListObject “字段”公式,然后使用相同的“字段”循环到同一工作簿中的所有其他ListObjects 并将公式应用于“Field”

之前的ListObjects

Sub ListObjects_Formula_Copy()
Dim wsh As Worksheet
Dim lob As ListObject
Dim rTrg As Range
Dim sFld As String
Dim sFmlR1C1 As String

    Rem Get Formula from Primary ListObject
    sFld = "Price"                                                      'Change as required
    Set lob = ThisWorkbook.Sheets("Sht(0)").ListObjects(1)              'Change as required
    sFmlR1C1 = lob.ListColumns(sFld).DataBodyRange.Cells(1).FormulaR1C1

    Rem Apply Formula to Other ListObjects
    For Each wsh In ThisWorkbook.Worksheets
        If wsh.Name <> "Sht(0)" Then
            For Each lob In wsh.ListObjects
                Rem Validate Field
                Set rTrg = Nothing
                On Error Resume Next
                Set rTrg = lob.ListColumns(sFld).DataBodyRange
                On Error GoTo 0
                Rem Applies Formula
                If Not (rTrg Is Nothing) Then rTrg.FormulaR1C1 = sFmlR1C1
    Next: End If: Next

End Sub
在之后

ListObjects enter image description here