如果选中复选框,则在下一个工作表上更改单元格的单元格颜色

时间:2016-09-21 23:22:47

标签: excel vba excel-vba checkbox

我有一份excel文件,其中包含代表每个月信息的表格。这些表包含成员列表。每张纸上都有多个复选框(每张约250张)。我想做以下几点。

让我们以SeptemberOctober为例。如果我勾选September - 表格上的复选框,则复选框所在的同一单元格的颜色(例如D23)在下一页上(在这种情况下,它将是"October" )应该变成蓝色。如果取消选中相同的复选框(即使将来也是如此),则单元格应变为红色。

  1. 选中'September'!D:23
  2. 上的复选框
  3. 下一张D23上的单元格October上的颜色变为蓝色
  4. 取消选中'September'!D:23
  5. 上的复选框
  6. 下一张D23上的单元格October上的颜色变为红色
  7. 我解决问题的方法:我写了一个Sub,当创建一个复选框时,它会将复选框链接到它所放置的单元格(例如D23),这样我就可以了可以知道在下一张纸上选中/取消选中时需要更改哪个单元格:

    .LinkedCell = Selection.Address(False, False)
    

    这是我迄今为止所尝试的但没有成功:

    Sub SetMacro()
      Dim cb
      For Each cb In ActiveSheet.CheckBoxes
        If cb.OnAction = "" Then cb.OnAction = "CheckedUnchecked"
      Next cb
    End Sub
    

    以下是检查/取消选中的代码:

    Sub CheckedUnchecked()
    With ActiveSheet.Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell)
        If .Value Then
            Worksheet(ActiveSheet.Index + 1).Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Interior.ColorIndex = 5
        Else
        Worksheet(ActiveSheet.Index + 1).Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Interior.ColorIndex = 3
        End If
    End With
    End Sub
    

    对此事有何想法?

2 个答案:

答案 0 :(得分:2)

工作表有一个.Next方法,它引用工作表集合中的下一个工作表。如果工作表是集合中的最后一个工作表,它将不返回任何内容。

enter image description here

粘贴到标准模块

Sub CheckedUnchecked()
    Dim cb As CheckBox
    With ActiveSheet
        Set cb = .CheckBoxes(Application.Caller)
        If Not cb Is Nothing Then
            If .Next Is Nothing Then
                Worksheets("January").Range(cb.TopLeftCell.Address).Interior.ColorIndex = IIf(cb.Value = 1, 5, 3)
            Else
                .Next.Range(cb.TopLeftCell.Address).Interior.ColorIndex = IIf(cb.Value = 1, 5, 3)
            End If
        End If
    End With
End Sub

答案 1 :(得分:2)

已编辑 NextMonthSht()以便在9之后正确处理月份 index

以下是一个略有不同的解决方案:

  • 允许任何索引顺序的月份表

  • 允许任何工作表名称

代码:

Sub CheckedUnchecked()
    With ActiveSheet.CheckBoxes(Application.Caller)
        NextMonthSht.Range(.TopLeftCell.Address).Interior.ColorIndex = IIf(.Value = 1, 5, 3)
    End With
End Sub

Function NextMonthSht() As Worksheet
    Const MONTHS As String = "January,February,March,April,Maj,June,July,August,September,October,November,December,January"

    Set NextMonthSht = Worksheets(Split(MONTHS, ",")(Len(Left(MONTHS, InStr(MONTHS, ActiveSheet.name))) - Len(Replace(Left(MONTHS, InStr(MONTHS, ActiveSheet.name)), ",", "")) + 1))
End Function