我正在尝试实现一个简单的for-each语句,它应该将数据从一个工作表(模板)复制到另一个(原始数据),然后是另一个'clean-up'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
答案 0 :(得分:1)
你的话说
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
变量包含要清理的单元格。
答案 1 :(得分:0)
这应该可以让您了解如何简化部分代码
使用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