使用IsEmpty来停止循环

我发现了一个直接应用于我要在这里构build的代码的线程Excel VBA:通过单元格循环并将值复制到另一个工作簿 。

Sub test() Dim ws1 As Worksheet, ws2 As Worksheet Dim CurCell_1 As Range, CurCell_2 As Range Dim Ran As Range Dim Group As Range, Mat As Range Application.ScreenUpdating = True Set ws1 = ActiveWorkbook.Sheets("Scrap") Set ws2 = ActiveWorkbook.Sheets("FC Detail") For Each Mat In ws1.Range("E:E") Set CurCell_2 = ws2.Range("F8") For Each Group In ws1.Range("E:E") Set CurCell_1 = ws1.Cells(Group.Row, Mat.Column) If Not IsEmpty(CurCell_2) Then CurCell_2.Value = CurCell_1.Value End If Next Next End Sub 

这个代码有一个例外,它不断循环。

我认为, If Not IsEmpty将是VBA的描述符,一旦它到达列表的结尾,停止程序。

继续我的评论,试试这个。 这将会更快

 Sub Test() Dim ws1 As Worksheet, ws2 As Worksheet Dim CurCell_1 As Range, CurCell_2 As Range Dim Group As Range, Mat As Range, Ran As Range Dim lRow As Long Set ws1 = ActiveWorkbook.Sheets("Scrap") Set ws2 = ActiveWorkbook.Sheets("FC Detail") With ws1 lRow = .Range("E" & .Rows.Count).End(xlUp).Row Set Ran = .Range("E1:E" & lRow) For Each Mat In Ran Set CurCell_2 = ws2.Range("F8") For Each Group In Ran Set CurCell_1 = .Cells(Group.Row, Mat.Column) If Not IsEmpty(CurCell_2) Then CurCell_2.Value = CurCell_1.Value End If Next Next End With End Sub