excel 基于值更改单元格颜色,其中有单个单元格和多个单元格更改

dgjrabp2  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(250)

我正在为学生创建日历样式的时间表。
我们有很多课程,所以为了减轻时间表,我做了一个星期天开始日历的形式和日历中的依赖下拉使类。
例如,水平地三个级别,第一级别“初学者”,第二级别“AndroidSmartphone”,第三级别“相机”。
因此,我必须根据特定的单个单元格值更改单元格颜色,并应用于多个单元格。
也许用户会在工作表中输入多个值,例如全天; 1,2,3,周期,相同的类。
用户可能会改变主意,并立即删除这些类的值,在这种情况下,可能会删除3乘3的单元格。
下面的代码显示了错误代码13。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim trlRed As Long
    Dim adrBlue As Long
    
    trlRed = RGB(230, 37, 30)
    adrBlue = RGB(126, 199, 216)
    
    If Not Intersect(Target, Range("M31:AM53")) Is Nothing Then
        For Each cell In Target.Cells
            If cell.Value = "Session" And cell.Offset(0, -2).Value = "Trial" Then
                cell.Offset(0, -2).Resize(1, 3).Interior.Color = trlRed 

            ElseIf cell.Value = "AndroidSmartphone" And cell.Offset(0, -1).Value <> "trial" Then
                cell.Offset(0, -1).Resize(1, 3).Interior.Color = adrBlue
            Else
                cell.Resize(1, 3).Interior.ColorIndex = xlColorIndexNone
            End If
        Next cell
    End If
End Sub

我想创建的工作表,可以动态改变单元格颜色的基础上的值,单个单元格,多个单元格,并删除值。

6l7fqoea

6l7fqoea1#

您的代码检查Target中的任何单元格是否也在M31:AM53中,然后循环遍历Target中的 * 所有 * 单元格。您应该只循环遍历感兴趣范围内的Target单元格。
如果你循环所有的Target单元格,你可能会尝试访问(例如)cell.Offset(0, -2)的列A或B中的单元格。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim trlRed As Long, adrBlue As Long, rng As Range, cell As Range
    
    trlRed = RGB(230, 37, 30)
    adrBlue = RGB(126, 199, 216)
    
    Set rng = Application.Intersect(Target, Me.Range("M31:AM53"))
    If Not rng Is Nothing Then 'only loop though any cells in M31:AM53
        For Each cell In rng.Cells
            If cell.Value = "Session" And cell.Offset(0, -2).Value = "Trial" Then
                cell.Offset(0, -2).Resize(1, 3).Interior.Color = trlRed
            ElseIf cell.Value = "AndroidSmartphone" And cell.Offset(0, -1).Value <> "trial" Then
                cell.Offset(0, -1).Resize(1, 3).Interior.Color = adrBlue
            Else
                cell.Resize(1, 3).Interior.ColorIndex = xlColorIndexNone
            End If
        Next cell
    End If
End Sub

相关问题