我使用以下宏将行从一个工作表移动到另一个工作表。这部分就像一个魅力。我想弄清楚的是如何在不影响我的条件格式的情况下做到这一点。
Sub MoveCompleted()
Dim h As Variant
Dim endrow As Integer
Dim OL As Worksheet, Cmp As Worksheet
Set OL = ActiveWorkbook.Sheets("Open_Log")
Set Cmp = ActiveWorkbook.Sheets("Completed")
endrow = OL.Range("A" & OL.Rows.Count).End(xlUp).Row
For h = 2 To endrow
If OL.Cells(h, "H").Value = "COMPLETE" Then
OL.Cells(h, "H").EntireRow.Cut Destination:=Cmp.Range("A" & Cmp.Rows.Count).End(xlUp).Offset(1)
End If
Next
End Sub
我有要发布的图片,包括我的格式,但我的代表在此网站上的代表太低,无法发布。
快速举例:
在运行宏之前"适用于"看起来像是:=$A$12:$I$100000
运行宏后,它看起来像:=$A$12:$I$63,$A$68:$I$100000
留下先前移动的行所在的间隙。
答案 0 :(得分:0)
移动后似乎没有办法重置条件格式。 (之前已经提到过几次问题。)
答案 1 :(得分:0)
我想你可能想以稍微不同的方式重新考虑你想要做的事情。
您可以清除整个行,而不是删除整行。
此外,您可以使用循环非常轻松地设置每个单元格的值,而不是复制整行。这将保留单元格中的格式。我确信还有其他方法可以做到这一点,但我全都赞成向人们展示如何运行简单的循环,而不是从宏中记录剪切和粘贴。
尝试将这段代码放入已有的代码中。
LastCompletedRow = Sheets("Completed").Range("A" & Rows.Count).End(xlUp).Row
LastCol = Sheets("Open_Log").Cells(1, Columns.count).End(xlToLeft).Column 'Get the last column on the source.
For h = 2 To endrow
If OL.Cells(h, "H").Value = "COMPLETE" Then
For col = 1 To LastCol
Sheets("Completed").Cells(LastCompletedRow, col).Value = Sheets("Open_Log").Cells(h, col).Value
Sheets("Open_Log").Cells(h, col).Value = "" 'Clear the original cell you just copied.
Next col
End If
Next