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



我正在尝试实现一个简单的 for-each 语句,该语句应该将数据从一个工作表(模板)复制到另一个工作表(原始数据),然后是另一个"清理"每个 + If 语句,它应该清除以前复制的所有单元格,除了 5 个具有预定义计算的单元格。

我从 for-each 语句开始,该语句清除了所有字段(并且工作正常),除了后来我认为我需要在某些字段上例外的事实。因此,我添加了一个简单的 If 语句,该语句指示 sub 转到下一个单元格而不清除它,以防出现这几个特定的单元格范围。

出于某种原因,在运行该代码时,它会清除定义范围内的所有字段,但字段 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

但是,您可能还想考虑使用一个包含要复制的单元格的Range变量和另一个包含要清理的单元格的Range变量。

这应该让你知道如何简化一些代码

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

最新更新