我正在尝试实现一个简单的 for-each 语句,该语句应该将数据从一个工作表(模板)复制到另一个(原始数据),然后是另一个“清理” 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
的单元格的变量,以及包含要清理的单元格的另一个变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句