2016-11-25 43 views
2

我有一个工作簿怪物,我试图让那些在我之后使用它的人更容易管理。我有大量的代码在按下按钮时运行,以使其对那些对Excel几乎一无所知的用户更友好。所以这里是我需要帮助的地方。当跨表单复制时,结构化引用更改为绝对

我有几张带有类似桌子的床单。我的第一张表格包含客户信息的主列表并按下一个按钮,将这些信息复制到另一张表格中并对其进行分类,以将这些客户分类到各自的表格中。这使我只能在第一张纸上输入新信息,并使其自动填充纸张以最大限度地减少人为错误。

为了减少很多错误,我在表中使用了结构化引用。我原本没有这样做,但我一直在努力改进这个工作簿。 无论如何,所以我必须在每个表中的列“收费类型”,总列引用它作为

[@[Charge Type]] 

这是伟大的,考虑到客户将被添加和漂亮的定期清理,这减少了错误。

然而,当该公式被复制到另一片材的一个,它的转换到

All_List[@[Charge Type]] 

这增加Sheet 1上的表,这是“All_List”的名称。现在我想让它参考新表中新表中的“费用类型”一栏,我不能为我的生活弄清楚如何。

+0

'[费用类型]'可用于代替'[@ [电荷类型]]'在大多数情况下,但不确定是否将复制为All_List [Charge Type]' – Slai

+0

建议将标题更改为如下所示:“复制ListObjects公式” – EEM

回答

0

该解决方案使用一个变量来保存ListObject“场”式然后槽循环中具有相同“场”同一工作簿的所有其他ListObjects和式适用于“场”

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

+0

我将pl哎,看看能不能满足我的需求。我可以修改它以包含多个列吗? 截至目前,我的代码复制了整个信息表(不包括标题),而不仅仅是一列。 – zcr07

+0

这回答了您在文章中提到的问题:_“现在我希望它参考新表格中的”费用类型“一栏,并且我不能在我的生活中弄清楚如何。”_建议接受答案并发布另一个问题与问题的详细信息。 – EEM

+0

好吧,那么如果它不是该表中的唯一表格,怎么样?如果它是该工作表上的第二个表,我会使用类似ListObjects(2)的东西吗? – zcr07