Excel宏根据单元格条件移动行而不移动格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel宏根据单元格条件移动行而不移动格式相关的知识,希望对你有一定的参考价值。

我正在使用以下宏将行从一个工作表移动到另一个工作表。这部分就像一个魅力。我想弄清楚的是如何在不影响我的条件格式的情况下做到这一点。

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

留下先前移动的行所在的间隙。

答案

移动后似乎没有办法重置条件格式。 (之前已经提到过几次问题)。

另一答案

我想你可能想以一种略微不同的方式重新考虑你想要做的事情。

您可以清除它,而不是移除整行。

此外,您可以使用循环非常轻松地设置每个单元格的值,而不是复制整行。这将保留单元格中的格式。我确信还有其他方法可以做到这一点,但我都赞成向人们展示如何运行简单的循环,而不是从宏中记录剪切和粘贴。

尝试将这些代码放入已有的代码中。

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

以上是关于Excel宏根据单元格条件移动行而不移动格式的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 基于活动单元格运行宏

EXCEL的每个单元格实现一次输入后就无法再更改

EXCEL如何根据条件自动设置单元格颜色

在EXCEL中,如何使用VBA设置单元格内指定字符串格式 三六零问答

在excel中编辑长条件格式公式

Excel使用宏批量向单元格插入指定信息