跨表单复制时,结构化引用更改为绝对值

我有一个工作簿的怪物,我试图让那些在我之后使用它的人更容易pipe理。 我有大量的代码在按下button时运行,以使对Excel几乎一无所知的用户更友好。 所以这里是我需要帮助的地方

我有几张与类似的表。 我的第一张工作表包含客户信息的主列表,并按下一个button,将这些信息复制到另一张工作表中并对其进行分类,以将这些客户分类到各自的工作表上。 这使我只能在第一张纸上input新的信息,并使其自动填充纸张,以最大限度地减less人为错误。

为了减less很多错误,我在表中使用了结构化引用。 我本来没有这样做,但我一直在努力改进这个工作簿。 无论如何,所以我在每个表中都有一个“费用types”列,并且总列将其作为参考

[@[Charge Type]] 

这是非常好的,考虑到客户会被相当有规律的添加和删除,这样可以减less错误。

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

  All_List[@[Charge Type]] 

它在sheet1上添加表格的名字,即“All_List”。 现在我想要在新表格中特别引用“费用types”一栏,我不能为我的生活弄清楚如何。

此解决scheme使用一个variables来保存ListObject “Field”公式,然后使用相同的“Field”在同一工作簿中循环查看所有其他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之后 在这里输入图像说明