我尝试了一下,因为这对我来说有点有趣。将所有这些代码放入您的工作表模块中:
Private Sub ToggleButton1_Click()
HideColumns (1)
End Sub
Private Sub ToggleButton2_Click()
HideColumns (2)
End Sub
Private Sub ToggleButton3_Click()
HideColumns (3)
End Sub
Private Sub ToggleButton4_Click()
HideColumns (4)
End Sub
Private Sub ToggleButton5_Click()
HideColumns (5)
End Sub
Private Sub ToggleButton6_Click()
HideColumns (6)
End Sub
Private Sub ToggleButton7_Click()
HideColumns (7)
End Sub
Private Sub ToggleButton8_Click()
HideColumns (8)
End Sub
Private Sub ToggleButton9_Click()
HideColumns (9)
End Sub
Private Sub ToggleButton10_Click()
HideColumns (10)
End Sub
Private Sub ToggleButton11_Click()
HideColumns (11)
End Sub
Private Sub ToggleButton12_Click()
HideColumns (12)
End Sub
Sub HideColumns(MonthID As Integer)
Dim ColRng As Variant, i As Long, ToggleCount As Long
ColRng = Array("B:G", "H:M", "N:S", "T:Y", "Z:AE", "AF:AK", "AL:AQ", "AR:AW", "AX:BC", "BD:BI", "BJ:BO", "BP:BU", "B:BU")
Columns(ColRng(12)).Hidden = True
Dim ctl As OLEObject
For Each ctl In Me.OLEObjects
If Left(ctl.Name, 6) = "Toggle" Then
i = Mid(ctl.Name, 13)
If ctl.Object.Value = True Then
Columns(ColRng(i - 1)).Hidden = False
ToggleCount = ToggleCount + 1
End If
End If
Next
If ToggleCount = 0 Then
Columns(ColRng(12)).Hidden = False
End If
End Sub
注意事项:
- 我基于你的项目(我下载了它)所以一切都应该是正确的。
-
ColRng 是按 1 月到 12 月顺序排列的每个月的列列表。
- 请记住,由于未指定工作表,这将在活动工作表上进行更改。
- 点击事件中的数字(例如
HideColumns (1))是月份数。我看到你按顺序排列了按钮,所以ToggleButton1 等于一月。
我已将 togglecount 保存到该范围,但已更改,因此不需要它,它只是在继续之前检查哪些列已经隐藏。这样代码是自依赖的。
编辑:我已将代码更新为不同的方式。这种新方法要简单得多,只需循环切换按钮本身。它隐藏所有列,然后循环通过按钮检查它们是否被切换。