vba - Visio VBA 从选择中获取形状
问题描述
我需要在 Visio 中引用一个选定的(通过鼠标单击,它只需要是一个选择)形状。然而,形状可能在一个组中。当我在组中选择一个形状时,我似乎无法让它工作,shp 对象仍然是空的。
Sub selectTest()
Dim sel As Visio.Selection
Set sel = ActiveWindow.Selection
Dim shp As Visio.Shape
Set shp = sel.PrimaryItem
If Not shp Is Nothing Then
MsgBox "It worked"
Else
MsgBox "No shape in sel"
End If
End Sub
选择“顶级”组时,它可以工作。当组中可能是组本身的组形状时,就没有选择。When a shape which is not in a group is selected, it works again.
上下文:我想从上下文菜单中触发自定义 VBA 代码。当您右键单击形状时,它会自动被选中。
当它在一个组中时,如何获得对形状的引用?
编辑:进一步澄清:我的文档中的形状都有相应的数据库条目。我想(通过 XML)向上下文菜单添加一个自定义删除按钮(有效),这应该调用一个删除方法,该方法获取调用该方法的形状作为参数,以便它可以搜索相应的数据库条目并删除在使用 shape.delete 删除形状(及其所有子形状)之前(以及任何子形状的条目,如果所选形状是一个组)
解决方案
使用Selection.IterationMode
属性在选择中包含子选择的形状
Set sel = ActiveWindow.Selection
sel.IterationMode = 0
Set shp = sel.PrimaryItem
推荐阅读
- javascript - JavaScript 中的待办事项列表 - 删除任务后,您无法正确选择另一个任务
- django - DRF 仅获取列表视图的第一个序列化实例?
- c - 双指针作为C中的参数
- c# - 防止 iText7 中的换行文本重叠
- python - 从数据框索引中删除国家组
- ssh - VSCode v1.43 远程 ssh 无法连接。v1.42 作品
- android - 在Android.mk中,如何将一个目录下的所有文件递归复制到out/vendor/目录下
- android - 在 Android 的 Crashlytics 报告中获取 KeyStore.aliases() 上的 NullPointerException
- maven - 在 Ejb 项目中,来自 src/main/java 的 java 类看不到来自 src/test/java 的类
- python - 从数据集 Python 中获取缺失的日期时间 - 数据系列