ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1853|回复: 6

[求助] 三角箭头显示下拉菜单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-16 10:53 | 显示全部楼层 |阅读模式




VBA新手求助各位大虾:一通操作以后,“课程1”明明是折叠状态,为什么三角箭头向下了?操作步骤写在附件里了。

三角箭头菜单

三角箭头菜单

箭头.zip

18.04 KB, 下载次数: 29

三角箭头菜单

TA的精华主题

TA的得分主题

发表于 2020-3-16 11:00 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-16 13:43 | 显示全部楼层
mmwwdd 发表于 2020-3-16 11:00
我下载了,正常呀

仔细看我的操作步骤,不要把“课程1”箭头折叠回去,多余步骤不要做。

TA的精华主题

TA的得分主题

发表于 2020-3-16 14:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-16 14:38 | 显示全部楼层
  ActiveSheet.Shapes.Range(Array("Isosceles Triangle 2")).IncrementRotation 180
这条语句是顺时针180度,点击完图形翻一下,你少 点一下,当然还是朝下

TA的精华主题

TA的得分主题

发表于 2020-3-16 14:48 | 显示全部楼层
不要使用IncrementRotation属性,它不能识别上下方向,可改用Rotation属性。

TA的精华主题

TA的得分主题

发表于 2020-3-16 17:22 | 显示全部楼层
功能性重构,可读性、可编辑性更强
  1. Option Explicit

  2. Enum enuState
  3.     Collapse = True
  4.     Expand = False
  5. End Enum

  6. Dim blAct(3) As Boolean '菜单状态。0为主菜单,1-3对应3个子菜单


  7. Sub 主菜单()
  8.     blAct(0) = Not blAct(0)
  9.     If Not blAct(0) Then 一级菜单 Expand Else 一级菜单 Collapse
  10. End Sub

  11. Sub 课程1()
  12.     blAct(1) = Not blAct(1)
  13.     If Not blAct(1) Then 二级菜单_课程1 Expand Else 二级菜单_课程1 Collapse
  14. End Sub

  15. Sub 课程2()
  16.     blAct(2) = Not blAct(2)
  17.     If Not blAct(2) Then 二级菜单_课程2 Expand Else 二级菜单_课程2 Collapse
  18. End Sub

  19. Sub 课程3()
  20.     blAct(3) = Not blAct(3)
  21.     If Not blAct(3) Then 二级菜单_课程3 Expand Else 二级菜单_课程3 Collapse
  22. End Sub




  23. Function 一级菜单(Act As enuState)
  24.     If Act = Expand Then
  25.         SetMenuState 3, Array(4, 8, 13), "等腰三角形 1", Act, Array("等腰三角形 2", "等腰三角形 3", "等腰三角形 4"), "3:18"
  26.     Else
  27.         SetMenuState 3, Array(4, 8, 13), "等腰三角形 1", Act, , "3:18"
  28.     End If
  29. End Function

  30. Function 二级菜单_课程1(Act As enuState)
  31.     SetMenuState 4, Array(5, 6, 7), "等腰三角形 2", Act
  32. End Function

  33. Function 二级菜单_课程2(Act As enuState)
  34.     SetMenuState 8, Array(9, 10, 11, 12), "等腰三角形 3", Act
  35. End Function

  36. Function 二级菜单_课程3(Act As enuState)
  37.     SetMenuState 13, Array(14, 15, 16, 17), "等腰三角形 4", Act
  38. End Function


  39. Function SetMenuState(ParentID As Long, ChildID As Variant, ShapeName As Variant, Act As enuState, Optional ChildShapeName As Variant = "", Optional strArea As String = "")
  40.     Dim arrChildID As Variant, arrShapeName As Variant, arrChildShapeName As Variant
  41.     Dim lngID As Long
  42.    
  43.     '初始化子节点
  44.     If IsArray(ChildID) Then
  45.         arrChildID = ChildID
  46.     Else
  47.         ReDim arrChildID(0)
  48.         arrChildID(0) = CLng(ChildID)
  49.     End If
  50.    
  51.     '初始标志符
  52.     If IsArray(ShapeName) Then
  53.         arrShapeName = ShapeName
  54.     Else
  55.         ReDim arrShapeName(0)
  56.         arrShapeName(0) = ShapeName
  57.     End If
  58.    
  59.     '初始子节点标志符
  60.     If IsArray(ChildShapeName) Then
  61.         arrChildShapeName = ChildShapeName
  62.     Else
  63.         ReDim arrChildShapeName(0)
  64.         arrChildShapeName(0) = ChildShapeName
  65.     End If
  66.    
  67.     '如果有指定区域,先隐藏所有区域
  68.     If strArea <> "" Then ActiveSheet.Rows(strArea).Hidden = True
  69.    
  70.     '显示主菜单
  71.     ActiveSheet.Rows(ParentID).Hidden = False
  72.    
  73.     '显示隐藏子菜单
  74.     For lngID = LBound(arrChildID) To UBound(arrChildID)
  75.         ActiveSheet.Rows(arrChildID(lngID)).Hidden = Act
  76.     Next
  77.    
  78.     '改变标志符
  79.     For lngID = LBound(arrShapeName) To UBound(arrShapeName)
  80.         ActiveSheet.Shapes(arrShapeName(lngID)).Rotation = (Not Act) * 180
  81.     Next
  82.    
  83.     '改变子节点标志符
  84.     If arrChildShapeName(0) <> "" Then
  85.         For lngID = LBound(arrChildShapeName) To UBound(arrChildShapeName)
  86.             ActiveSheet.Shapes(arrChildShapeName(lngID)).Rotation = 0
  87.         Next
  88.     End If
  89. End Function





复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-24 08:06 , Processed in 0.045233 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表