2016-11-25 39 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