2017-11-11 173 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 

到这一点:

Worksheets(BodyNum).Range(BodyNum).Copy 
+0

它并不想调用指定的范围内工作,但它工作正常工作表。我可以使用'工作表(BodyNum).Range(“Body1”)。复制'例如,但这对循环没有帮助 –

+0

请澄清你想要什么做。 – Excelosaurus

+0

我想复制几个命名的范围,称为Body1,Body2,Body3等,每个位于同一名称的工作表到一个单独的工作簿使用循环。我希望指定的范围与循环迭代,而不是手动调用单元格。然而,使用'工作表(BodyNum).Range(BodyNum).Copy'会导致调试错误,并且无法运行,而手动调用单元格(Range'“Body1”)。Copy'或'Range(“B2: C50“)'会起作用,但不像我喜欢的那样循环 –