Excel VBA对于每个+ if语句exception问题

我试图实现一个简单的for-each语句,应该将数据从一个工作表(模板)复制到另一个(原始数据),然后是另一个“清理”for-each + If语句,这是假设清除先前复制的所有单元,除了5个具有预定义计算的单元。

我开始用for-每个语句清除所有的字段(并工作正常),除了事实,后来我认为我需要在一些领域的例外。 所以,我添加了一个简单的If语句,指示子进入下一个单元格而不清除它,以防特定的单元格范围。

出于某种原因,在运行该代码时,它会清除除了未包含在exception中的字段K15以外定义的范围内的所有字段,我不知道为什么会发生这种情况; __; 我试过解决,但不能拿出任何东西。

我的代码粘贴在下面。 任何意见将不胜感激 – 包括改善代码的任何提示。 谢谢!

Sub CopyData() Dim TargetRow, CopyRange, Cell As Range Dim RowCount, ColumnCount, ColumnLast, ColC As Long Dim ws As Worksheet Application.ScreenUpdating = False ColumnCount = 1 ColumnLast = 51 ColC = 1 Set ws = ThisWorkbook.ActiveSheet Set CopyRange = Range("C10:C15,C17:C18,E12,E17:E18,K4:K6,K9,K11:K45") Sheets("RawData").Activate RowCount = Range("A1").CurrentRegion.Rows.Count + 1 Set TargetRow = Range(Cells(RowCount, ColumnCount), Cells(RowCount, ColumnLast)) For Each Cell In CopyRange TargetRow.Cells(ColC).Value = Cell.Value ColC = ColC + 1 Next Cell ws.Activate For Each Cell In CopyRange If Cell = Range("K4") Or Cell = Range("K5") Or Cell = Range("K6") Or Cell = Range("K9") _ Or Cell = Range("K46") Then GoTo Forward Else Cell.Value = "" End If Forward: Next Cell Application.ScreenUpdating = True End Sub 

你的线说

 If Cell = Range("K4") Or Cell = Range("K5") Or _ Cell = Range("K6") Or Cell = Range("K9") Or _ Cell = Range("K46") Then GoTo Forward 

相当于

 If Cell.Value = Range("K4").Value Or Cell.Value = Range("K5").Value Or _ Cell.Value = Range("K6").Value Or Cell.Value = Range("K9").Value Or _ Cell.Value = Range("K46").Value Then GoTo Forward 

我想你的意思是使用

 If Cell.Address = Range("K4").Address Or Cell.Address = Range("K5").Address Or _ Cell.Address = Range("K6").Address Or Cell.Address = Range("K9").Address Or _ Cell.Address = Range("K46").Address Then GoTo Forward 

相当于

 If Cell.Address = "$K$4" Or Cell.Address = "$K$5" Or _ Cell.Address = "$K$6" Or Cell.Address = "$K$9" Or _ Cell.Address = "$K$46" Then GoTo Forward 

但是你也可以考虑让一个Rangevariables包含要复制的单元格,另一个Rangevariables包含要清理的单元格。

这应该给你一个想法如何简化你的一些代码

使用F8单步执行此代码,并同时查看您的工作表

 sub test() ' the select statements are only to show the range, and are not needed Range("a1").Select ' get highlight out of the way Range("C10:C15,C17:C18,E12,E17:E18,K4:K6,K9,K11:K45") = "abc123" Range("C10:C12,C17:C18,E12").ClearContents Range("C10:C15,C17:C18,E12,E17:E18,K4:K6,K9,K11:K45").SpecialCells(xlCellTypeBlanks).Select Range("C10:C15,C17:C18,E12,E17:E18,K4:K6,K9,K11:K45").Select Range("a1").Select Range("C10:C15,C17:C18,E12,E17:E18,K4:K6,K9,K11:K45").ClearContents end sub