如何使用VBA

时间:2019-09-10 08:54:39

标签: excel vba

我已经在Excel中为自己的工作班次设置了日历。例如,

C55:I55包含一周的日期(1月,2月,3月等) C56:I56包含班次,这些班次是根据条件格式进行着色的(我工作的早班/晚班/夜班有不同的颜色)

现在,我希望日期行(C55:I55)复制班次行(C56:I56)的颜色。我有一些基本的VBA代码可以对一个单元执行此操作,但是如何使其连续工作呢?

我已经在Web和StackOverflow上寻找解决方案,但是找不到所需的特定解决方案。

这是我当前拥有的代码:

Private Sub Worksheet_Calculate()
    Range("C55").Interior.Color = Range("I55").DisplayFormat.Interior.Color
End Sub

-

编辑

因此,在一些帮助和调整下,我可以使用以下代码来工作:

Private Sub Worksheet_Calculate()

Dim i As Long

    With ThisWorkbook.Worksheets("Rooster 2020")

        For i = 3 To 9
           .Cells(63, i).Interior.Color = .Cells(64, i).DisplayFormat.Interior.Color
        Next i

    End With

End Sub

现在我很好奇,有没有办法在上面的示例中包含比“ 63”和“ 64”更多的行?

4 个答案:

答案 0 :(得分:2)

有条件的格式<> .Interior.Color,因此您需要复制粘贴格式,例如:

Private Sub Worksheet_Calculate()
    'This will copy the conditional formatting
    'Change the sheet name. ThisWorkbooks points to the workbook holding the code
    With ThisWorkbook.Sheets("MySheet")
        .Range("C55").Copy
        .Range("I55").PasteSpecial xlPasteFormats
    End With

    'This will only copy the color from the cell
    With ThisWorkbook.Sheets("MySheet")
        .Range("I55").DisplayFormat.Interior.ColorIndex = .Range("C55").DisplayFormat.Interior.ColorIndex
    End With

End Sub

答案 1 :(得分:1)

使用此代码,您只需复制内部颜色:

代码:

Option Explicit

Sub test()

    Dim y As Long, i As Long
    Dim arrLines As Variant

    'Colored Lines
    arrLines = Array(1, 4, 23)

    With ThisWorkbook.Worksheets("Sheet1")

        For y = LBound(arrLines) To UBound(arrLines)

            For i = 3 To 9
               'Color the next line from the line which has colot
               .Cells(arrLines(y) + 1, i).Interior.Color = .Cells(arrLines(y), i).Interior.Color
            Next i

        Next y
    End With

End Sub

结果:

enter image description here

答案 2 :(得分:0)

如果您使用它,则需要确保将放入问题中的代码放在{strong}的z-index中,而不要放入的{{1 }}

请注意,只要重新计算工作表,就会触发Sheet事件

如果不重新计算工作表,则可以尝试使用module

Worksheet_Calculate

注意Worksheet_Change将在值更改时触发。 (如果您使用计算Public Sub worksheet_change(ByVal target As Range) If Not Application.Intersect(target, Range("C61:I61")) Is Nothing Then target.Interior.Color = Cells(target.Row + 1, target.Column).DisplayFormat.Interior.Color End If End Sub 是个不错的选择)

输出前:

enter image description here

之后输出:

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

依此类推

答案 3 :(得分:0)

如前所述,您不需要VBA即可执行此操作。您可以通过扩展应用范围来进行条件格式

考虑您有这样的数据:

enter image description here

您需要执行以下步骤:

  1. 选择C56并使用规则类型使用公式来确定要格式化的单元格,以创建条件格式。因此,根据您的评论,您的公式应如下所示:=AND(C$56>=1,C$56<=10)(用于蓝色)和=AND(C$56>=11,C$56<=20)(用于红色)。重要的是要注意,尽管在公式中,我们使用C$56锁定了列移动(相对引用)时的行(绝对引用),这意味着它将始终引用第56行的值,但列会进行调整。因此,格式将基于C$56D$56E$56 ...和I$56值。

    enter image description here

  2. 现在,创建规则后,您需要编辑其适用范围。

    enter image description here

  3. 更改范围后,按应用。

    enter image description here

请注意,尽管您在C56上创建了条件格式,但您在$C$55:$I$56上应用了它。完成所有这些步骤后,您将看到如下结果。

enter image description here