我有一份excel文件,其中包含代表每个月信息的表格。这些表包含成员列表。每张纸上都有多个复选框(每张约250张)。我想做以下几点。
让我们以September
和October
为例。如果我勾选September
- 表格上的复选框,则复选框所在的同一单元格的颜色(例如D23
)在下一页上(在这种情况下,它将是"October"
)应该变成蓝色。如果取消选中相同的复选框(即使将来也是如此),则单元格应变为红色。
'September'!D:23
D23
上的单元格October
上的颜色变为蓝色'September'!D:23
D23
上的单元格October
上的颜色变为红色我解决问题的方法:我写了一个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
对此事有何想法?
答案 0 :(得分:2)
工作表有一个.Next
方法,它引用工作表集合中的下一个工作表。如果工作表是集合中的最后一个工作表,它将不返回任何内容。
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