2017-03-08 67 views
1

我在Sheet2的“TransTypes”动态命名的范围,我定义为一个嵌套的循环:通过动态循环命名范围VBA

=OFFSET(Sheet2!$A$1,0,0,COUNTA(Sheet2!A:A),1) 

和我的循环如下:

Sub Repeat_trans_type() 
    Dim Trans_type_count As Integer, wb As Workbook, wsMain As Worksheet, nwb As Workbook 
    Dim i As Integer, nws As Worksheet, wsSheet2 As Worksheet, j As Integer, cell As Range 
    Dim k As Integer 


    Trans_type_count = Sheet2.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 

    Application.ScreenUpdating = False 

    Set wb = Workbooks("Book1.xlsm") 
    Set wsMain = wb.Sheets("Sheet1") 
    Set wsSheet2 = wb.Sheets("Sheet2") 

    j = 1 
    k = 1 

Set nwb = Workbooks.Add 
Set nws = nwb.Sheets(1) 

For j = 1 To 96 
     i = 1 
     Set cell = Nothing 
     For Each cell In wsSheet2.Names("TransTypes").RefersToRange.Cells    
     wsMain.Range("A" & j, "C" & j).Copy 
     nws.Range("A" & k).PasteSpecial xlPasteValues 
     nws.Range("A" & k).PasteSpecial xlPasteFormats 
     wsSheet2.Range("A" & i).Copy 
     nws.Range("D" & k).PasteSpecial xlPasteValues 
     nws.Range("D" & k).PasteSpecial xlPasteFormats 
     i = i + 1 
     k = k + 1 
    Next cell 
    Next j 
End Sub 

嵌套循环的第一次迭代工作正常,但在启动时对第二次执行,即,J = 2,I得到的错误消息:

Application-defined or object-defined error 

截至目前,我已通过使用下面的工作:

For Each cell In wsSheet2.Range("A1", wsSheet2.Range("A1").End(xlDown)) 

而不是直接使用指定的范围。

为什么偏移方法不工作的任何想法,将不胜感激。

谢谢。

+0

不知道你对于每一个循环是做什么的根本就没有在循环中引用它?你应该发布你的所有代码。 – SJR

+0

我已编辑帖子以包含完整的代码。 – dexterd

+0

好的,通过范围循环的重点是什么? – SJR

回答

1

很难说什么是错在这里,但我建议你尝试以下方法:

  • 使用For Each cell In wsSheet2.Range("TransTypes").Cells在/每

For j = 1 To 96 
    i = 1 
    Set cell = Nothing 
    For Each cell In wsSheet2.Range("TransTypes").Cells 'changed this line (2) 
     wsMain.Range("A" & j, "C" & j).Copy 
     nws.Range("A" & k).PasteSpecial xlPasteValues 
     nws.Range("A" & k).PasteSpecial xlPasteFormats 
     wsSheet2.Range("A" & i).Copy 
     nws.Range("D" & k).PasteSpecial xlPasteValues 
     nws.Range("D" & k).PasteSpecial xlPasteFormats 
     i = i + 1 
     k = k + 1 
    Next cell 
Next j 
+0

谢谢!奇迹般有效。 – dexterd