2016-11-25 8 views
2

私は、後でそれを使用する人にとってより管理しやすいブックのモンスターを持っています。私は、ボタンを押してExcelをほとんど知らない人にも使いやすいようにするためにボタンが押されたときに実行される大量のコードを持っています。ここで私は助けが必要です。シート全体にコピーすると、構造化された参照が絶対に変更されます

私は、同じような表を持ついくつかのシートを持っています。私の最初のシートには顧客情報のマスターリストが含まれており、ボタンを押してこの情報をお互いのシートにコピーし、それらの顧客をそれぞれのシートに分類するためにソートします。これにより、最初のシートにのみ新しい情報を入力し、シートを正しく自動入力して人的ミスを最小限に抑えることができます。

多くのエラーを削減するために、テーブルで構造化参照を使用しました。もともと私はこのようにしていませんでしたが、私は時間の経過とともにこのワークブックを改善しようとしてきました。 はとにかく、私は、各テーブルのカラム「充電タイプ」を持っている、との合計列参照それ

素晴らしいです
[@[Charge Type]] 

として、検討のお客様は、追加され、かなり定期的に削除され、これはエラーにダウンカットします。この式は、他のシートの1つにコピーされるとき

しかし、それは「All_List」であるSheet1の表の名前を追加します

All_List[@[Charge Type]] 

にオーバー変換されます。今では新しいシートの新しいテーブルの「チャージタイプ」の列を参照したいのですが、私の人生にとってはどうしたらいいか分かりません。

+0

''の代わりに '[@ [料金タイプ]]'でほとんどのケースで使用することができます[料金タイプ]、それが 'All_List [Charge Type] 'としてコピーされるかどうかは分かりません。 – Slai

+0

タイトルを「Copying ListObjects formula」に変更することを提案します。 – EEM

答えて

0

次いで、この溶液をListObject「フィールド」式を保持するために変数を使用しトラフ同じ「フィールド」と同じブック内の他のすべての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前

ListObjects enter image description here

+0

私はplしますこれで私のニーズに合ったものにすることができますか?これを変更して複数の列を含めることはできますか? 今のところ、私のコードは、単一の列だけでなく、情報テーブル全体(ヘッダを除いたもの)をコピーします。 – zcr07

+0

これはあなたの記事に記載されている問題に答える:_ "新しいシートの新しいテーブルの" Charge Type "という列を参照したいのですが、答えを受け入れて、あなたの問題の詳細とともに別の質問を投稿することをお勧めします。 – EEM

+0

さて、もしそれがそのシートの中の唯一のテーブルでないなら、どうでしょうか。そのワークシート上の2番目の表であれば、ListObjects(2)のようなものを使用できますか? – zcr07

関連する問題