2017-11-11 10 views
0

複数の名前付き範囲をコピーします。範囲には、短い文字列、番号(例:Body1、Body2など)を持つ命名規則が設定されています。Excel VBA:複数の名前付き範囲のループをコピーします。

私の回避策は各シート名をループし、それぞれの名前付き範囲の代わりにB2:C50という範囲をコピーします。これは私の好みです。

コード:

Dim Bnum As Integer   'Bnum is Loop Counter 
Dim Nbodies As Integer  'Nbodies is how many loops should go 
Dim BodyNum As String 

'BodyNum is the sheet name where the named range is (and also the named range I`d like to copy). The named ranges are workbook wide in this case 


Nbodies = Range("N.Bodies") 'Called from elsewhere in the workbook 

Bnum = 1     'Initial counter set 
BodyNum = "Body" & Bnum  'Name of worksheet+named range which I want to copy 

Do Until Bnum = Nbodies + 1 
    Workbooks(Wkbk).Activate 
    Worksheets(BodyNum).Range("B2:C50").Copy 

'Copies range manually definied in vba B2:C50 in this case. Want to copy named range with the same name as Bodynum, varying the digit for each loop 

    Workbooks(Inputbk).Activate  'The paste portion works fine 
    Selection.PasteSpecial Paste:=xlPasteValues 
    Call Cursor.Cursor 
    Workbooks(Wkbk).Activate 
    Bnum = Bnum + 1   'Iterates loop counter 
    BodyNum = "Body" & Bnum 
Loop 

答えて

0

私の理解では、あなたが「Body1」..「BodyN」、それぞれがワークシート自体の名を冠した名前付き範囲を持つという名前のワークシートのセットを持っているということです。

あなたはあなたがWant to copy named range with the same name as Bodynumと言います。この中

Worksheets(BodyNum).Range("B2:C50").Copy 

は次にあなたがしなければならない必要があるすべては、この行を回すある

それがために正常に動作しますが、それは、名前付き範囲を呼び出すために働くことを望んでいない
+0

Worksheets(BodyNum).Range(BodyNum).Copy 
ワークシート私は 'Worksheets(BodyNum).Range(" Body1 ")を使って特定の名前付き範囲を呼び出すことができるでしょう。例えばコピーですが、それはループに関して助けになりません –

+0

あなたがしようとしていることを明確にしてください行う。 – Excelosaurus

+0

ループを使用して別のワークブックに同じ名前のワークシートにあるBody1、Body2、Body3などと呼ばれる複数の名前付き範囲をコピーしたいとします。現在、手動でセルを呼び出す代わりに、名前付き範囲をループで反復処理したいと思います。しかし、 'Range(" Body1 ").Copy'または' Range( "B2:")というセルを手動で呼び出すとき、 'Worksheets(BodyNum).Range(BodyNum).Copy'を使うとデバッグエラーが発生し、 C50 ")'は動作しますが、私はそれが好きなようにループしません –

関連する問題