excel vba 复选框 全选
我要做一个Excel的报表,通过原始数据写公式自动计算成最终要呈现的数据。因为要展现每个月份的情况,现在用复选框进行了控制,比如点复选框“1月”,最终报表里面的数是一月份...
我要做一个Excel的报表,通过原始数据写公式自动计算成最终要呈现的数据。因为要展现每个月份的情况,现在用复选框进行了控制,比如点复选框“1月”,最终报表里面的数是一月份的数的计算结果。这个通过公式写进去就可以了。如果我要展示第一季度的,就要选“1月”,“2月”和“3月”。现在我想插入一个复选框,叫做“第一季度”,选中它以后前面说的3个复选框会自动勾选,取消选中以后这三个也会自动取消。另外,在这几个全部选中的情况下,取消选中其中的一个月份,“第一季度”复选框也会取消选择或者变成灰色;在这几个全部没有选中的情况下,选中这三个月份的复选框,“第一季度”复选框也会变成选中状态。同样还有“第二季度”,“第三季度”和“第四季度”是一样的情况。希望能把vba的代码写下来,不用四个季度的都写,写一个作示例就可以了。我现在用的是表单控件,不是Activex的控件。
展开
3个回答
展开全部
Private Sub CheckBox13_Click()
CheckBox13.TripleState = False
If CheckBox13.Value = True Then
CheckBox1.Value = True
CheckBox2.Value = True
CheckBox3.Value = True
Else
CheckBox1.Value = 0
CheckBox2.Value = 0
CheckBox3.Value = 0
End If
End Sub
Private Sub CheckBox1_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Private Sub CheckBox2_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Private Sub CheckBox3_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Function abc(t1 As Boolean, t2 As Boolean, t3 As Boolean)
If t1 And t2 And t3 Then
CheckBox13.Value = True
ElseIf Not t1 And Not t2 And Not t3 Then
CheckBox13.Value = False
Else
CheckBox13.TripleState = True
CheckBox13.Value = Null
End If
End Function
'说明:CheckBox13是第一季度复选框,CheckBox1、CheckBox2、CheckBox3分别是1、2、3月复选框。这几段程序满足你的选择状态要求,程序其他部分你自己考虑。其他几个季度也可调用ABC()函数过程
CheckBox13.TripleState = False
If CheckBox13.Value = True Then
CheckBox1.Value = True
CheckBox2.Value = True
CheckBox3.Value = True
Else
CheckBox1.Value = 0
CheckBox2.Value = 0
CheckBox3.Value = 0
End If
End Sub
Private Sub CheckBox1_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Private Sub CheckBox2_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Private Sub CheckBox3_Click()
Call abc(CheckBox1.Value, CheckBox2.Value, CheckBox3.Value)
End Sub
Function abc(t1 As Boolean, t2 As Boolean, t3 As Boolean)
If t1 And t2 And t3 Then
CheckBox13.Value = True
ElseIf Not t1 And Not t2 And Not t3 Then
CheckBox13.Value = False
Else
CheckBox13.TripleState = True
CheckBox13.Value = Null
End If
End Function
'说明:CheckBox13是第一季度复选框,CheckBox1、CheckBox2、CheckBox3分别是1、2、3月复选框。这几段程序满足你的选择状态要求,程序其他部分你自己考虑。其他几个季度也可调用ABC()函数过程
展开全部
可以试试用数据透视表,可能需要用到时间分组。
2003为列,先生成透视表,将时间列拖入行字段,右键,组及显示明细数据,组合。里面可以选择按月和季度,完成后将字段再拖入页字段区域。就可以选择按月或者季度了。
2003为列,先生成透视表,将时间列拖入行字段,右键,组及显示明细数据,组合。里面可以选择按月和季度,完成后将字段再拖入页字段区域。就可以选择按月或者季度了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议使用两个列表框,1个季度列表(listbox1),1个月份列表(listbox2),都带有勾选框,代码如下:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
X = ListBox1.ListIndex
Label1.Caption = ListBox1.ListIndex
If ListBox1.Selected(X) = True Then
For Y = 0 To ListBox2.ListCount - 1
If Y >= X * 3 And Y < X * 3 + 3 Then
ListBox2.Selected(Y) = True
Else
ListBox2.Selected(Y) = False
End If
Next Y
Else
For Y = 0 To ListBox2.ListCount - 1
If Y >= X * 3 And Y < X * 3 + 3 Then
ListBox2.Selected(Y) = False
End If
Next Y
End If
End Sub
Private Sub UserForm_Initialize()
For X = 1 To 4
ListBox1.AddItem X & "季度"
Next
For X = 1 To 12
ListBox2.AddItem X & "月份"
Next
End Sub
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
X = ListBox1.ListIndex
Label1.Caption = ListBox1.ListIndex
If ListBox1.Selected(X) = True Then
For Y = 0 To ListBox2.ListCount - 1
If Y >= X * 3 And Y < X * 3 + 3 Then
ListBox2.Selected(Y) = True
Else
ListBox2.Selected(Y) = False
End If
Next Y
Else
For Y = 0 To ListBox2.ListCount - 1
If Y >= X * 3 And Y < X * 3 + 3 Then
ListBox2.Selected(Y) = False
End If
Next Y
End If
End Sub
Private Sub UserForm_Initialize()
For X = 1 To 4
ListBox1.AddItem X & "季度"
Next
For X = 1 To 12
ListBox2.AddItem X & "月份"
Next
End Sub
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询