|
功能性重构,可读性、可编辑性更强
- Option Explicit
-
- Enum enuState
- Collapse = True
- Expand = False
- End Enum
- Dim blAct(3) As Boolean '菜单状态。0为主菜单,1-3对应3个子菜单
- Sub 主菜单()
- blAct(0) = Not blAct(0)
- If Not blAct(0) Then 一级菜单 Expand Else 一级菜单 Collapse
- End Sub
- Sub 课程1()
- blAct(1) = Not blAct(1)
- If Not blAct(1) Then 二级菜单_课程1 Expand Else 二级菜单_课程1 Collapse
- End Sub
- Sub 课程2()
- blAct(2) = Not blAct(2)
- If Not blAct(2) Then 二级菜单_课程2 Expand Else 二级菜单_课程2 Collapse
- End Sub
- Sub 课程3()
- blAct(3) = Not blAct(3)
- If Not blAct(3) Then 二级菜单_课程3 Expand Else 二级菜单_课程3 Collapse
- End Sub
- Function 一级菜单(Act As enuState)
- If Act = Expand Then
- SetMenuState 3, Array(4, 8, 13), "等腰三角形 1", Act, Array("等腰三角形 2", "等腰三角形 3", "等腰三角形 4"), "3:18"
- Else
- SetMenuState 3, Array(4, 8, 13), "等腰三角形 1", Act, , "3:18"
- End If
- End Function
- Function 二级菜单_课程1(Act As enuState)
- SetMenuState 4, Array(5, 6, 7), "等腰三角形 2", Act
- End Function
- Function 二级菜单_课程2(Act As enuState)
- SetMenuState 8, Array(9, 10, 11, 12), "等腰三角形 3", Act
- End Function
- Function 二级菜单_课程3(Act As enuState)
- SetMenuState 13, Array(14, 15, 16, 17), "等腰三角形 4", Act
- End Function
- Function SetMenuState(ParentID As Long, ChildID As Variant, ShapeName As Variant, Act As enuState, Optional ChildShapeName As Variant = "", Optional strArea As String = "")
- Dim arrChildID As Variant, arrShapeName As Variant, arrChildShapeName As Variant
- Dim lngID As Long
-
- '初始化子节点
- If IsArray(ChildID) Then
- arrChildID = ChildID
- Else
- ReDim arrChildID(0)
- arrChildID(0) = CLng(ChildID)
- End If
-
- '初始标志符
- If IsArray(ShapeName) Then
- arrShapeName = ShapeName
- Else
- ReDim arrShapeName(0)
- arrShapeName(0) = ShapeName
- End If
-
- '初始子节点标志符
- If IsArray(ChildShapeName) Then
- arrChildShapeName = ChildShapeName
- Else
- ReDim arrChildShapeName(0)
- arrChildShapeName(0) = ChildShapeName
- End If
-
- '如果有指定区域,先隐藏所有区域
- If strArea <> "" Then ActiveSheet.Rows(strArea).Hidden = True
-
- '显示主菜单
- ActiveSheet.Rows(ParentID).Hidden = False
-
- '显示隐藏子菜单
- For lngID = LBound(arrChildID) To UBound(arrChildID)
- ActiveSheet.Rows(arrChildID(lngID)).Hidden = Act
- Next
-
- '改变标志符
- For lngID = LBound(arrShapeName) To UBound(arrShapeName)
- ActiveSheet.Shapes(arrShapeName(lngID)).Rotation = (Not Act) * 180
- Next
-
- '改变子节点标志符
- If arrChildShapeName(0) <> "" Then
- For lngID = LBound(arrChildShapeName) To UBound(arrChildShapeName)
- ActiveSheet.Shapes(arrChildShapeName(lngID)).Rotation = 0
- Next
- End If
- End Function
复制代码 |
|