在VBA中通过dynamic命名范围循环

我有一个嵌套循环dynamic命名范围在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)) 

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

任何想法,为什么抵消方法不工作,将不胜感激。

谢谢。

很难说这里错了什么,但我build议你尝试以下几点:

  • 使用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