在VBA中循环通过动态命名范围

时间:2017-03-08 12:31:34

标签: excel vba excel-vba named-ranges

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

=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,我收到错误消息:

Application-defined or object-defined error

截至目前,我通过以下方式解决了这个问题:

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

而不是直接使用命名范围。

任何关于为什么偏移方法不起作用的想法都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分:1)

很难说这里有什么不对,但我建议您尝试以下方法:

  • 使用For Each cell In wsSheet2.Range("TransTypes").Cells for / each
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