2017-06-13 73 views
0

我遇到For Each循环导致Excel挂起的问题。一切工作在下面的代码,直到我得到For Each C In ColRng代码。一旦删除,一切再次运作。For Each Loop导致Excel挂起

Sub CopyWB() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 

Dim i As Integer 
Dim C As Range 
Dim MemAnal, AttAnal As Variant 
Dim ColRng As Range 

Set MemAnal = Worksheets("Membership Analysis") 
Set AttAnal = Worksheets("Attendance Analysis") 

MemAnal.Select 
    Set ColRng = Range(MemAnal.Cells(1, 1), MemAnal.Cells(1, MemAnal.UsedRange.Columns.Count)) 
    Range("E:J").EntireColumn.Insert 
    Range("E1:J1").Value = Array("Site Status", "Org Service Unit", "Org Region", _ 
     "Location State", "Key State", "DOD") 
    For Each C In ColRng 
     If InStr(1, C.Text, "Total Member Count using Age Group for YTD") = 0 Then 
      GoTo Break 
     Else 
      C.EntireColumn.Insert 
      C.Offset(0, -1).Value = "Teens " & Left(C.Text, 4) 
     End If 
Break: 
    Next C 

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
Application.DisplayStatusBar = True 
Application.EnableEvents = True 

End Sub 
+0

你为什么要这样做?如果我正确地阅读它,你可以做'If Instr([that formula])<> 0 Then // C.EntireColumn.Insert //C.Offset(0,-1).Value = ...'and因此不必使用'GoTo'(这是避免的最佳做法)。另外,你想检查整个范围内的每个单元吗?从A1开始说AZ1?这很可能是因为你正在检查很多单个单元。 – BruceWayne

+4

如果你找到一个包含该文本的单元格,在它之前插入一个列,这意味着下一个循环将再次处理该单元格,并且再一次,等等。 – Rory

+0

@BruceWayne我的'If'语句格式化为你以前的建议,但问题仍然存在。这只是我最近的一次迭代。 –

回答

0

感谢@Rory指出什么是导致一个问题,只要逻辑去。我已经重写了,以避免这种逻辑。下面是更新后的代码:

Sub CopyWB() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 

Dim i As Integer 
Dim C, ColRng, pyAddress, cyAddress As Range 
Dim MemAnal, AttAnal As Variant 

Set MemAnal = Worksheets("Membership Analysis") 
Set AttAnal = Worksheets("Attendance Analysis") 

MemAnal.Select 
    Range("E:J").EntireColumn.Insert 
    Range("E1:J1").Value = Array("Site Status", "Org Service Unit", "Org Region", _ 
     "Location State", "Key State", "DOD") 
    Set ColRng = Range(MemAnal.Cells(1, 1), MemAnal.Cells(1, _ 
     MemAnal.UsedRange.Columns.Count)) 
    Set pyAddress = ColRng.Find("Total Member Count using Age Group for YTD", LookIn:=xlValues) 
    Set cyAddress = ColRng.FindNext(pyAddress) 
    pyAddress.EntireColumn.Insert 
    pyAddress.Offset(0, -1).Value = "Teens " & Right(pyAddress.Text, 4) 
    cyAddress.EntireColumn.Insert 
    cyAddress.Offset(0, -1).Value = "Teens " & Right(cyAddress.Text, 4)  

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
Application.DisplayStatusBar = True 
Application.EnableEvents = True 

End Sub 

应当指出的是,这对我的作品,因为我碰巧知道,在这个数据,我将永远只能有这两个文本实例,但这些实例不断变化的位置因此需要.Find功能。我只是想了解我最初的做法。