在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