我有一个工作簿的怪物,我试图让那些在我之后使用它的人更容易管理。我按下大量的代码,按下按钮,使那些对Excel知之甚少的用户更友好。所以我需要帮助。
我有几张带有类似表格的表格。我的第一张纸包含客户信息的主列表并按下按钮,将此信息复制到另一张纸上,并对其进行分类,以便在各自的纸张上对这些客户进行分类。这允许我仅在第一张纸上输入新信息,并让它自动填充纸张以最大限度地减少人为错误。
为了减少很多错误,我在表格中使用了结构化引用。我最初并没有这样做,但我一直在努力改进这本工作簿。 无论如何,我在每个表中都有一个“Charge Type”列,并且总列将其引用为
[@[Charge Type]]
这很好,考虑到客户会定期添加和删除,这可以减少错误。
但是,当此公式被复制到其他工作表之一时,它会转换为
All_List[@[Charge Type]]
在sheet1上添加表的名称,即“All_List”。现在我想让它在新表的新表中特别引用“充电类型”一栏,我不能为我的生活弄清楚如何。
答案 0 :(得分:0)
此解决方案使用变量来保存ListObject
“字段”公式,然后使用相同的“字段”循环到同一工作簿中的所有其他ListObjects
并将公式应用于“Field”。
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
在之后