Visio VBA如何将Union合并后的形状分配到指定图层?
解决方案
Visio的Selection.Union方法执行后会直接返回合并生成的新Shape对象,你只需要用变量接收这个返回值,再传入图层的Add方法即可。
另外你现有代码缺少Selection对象的声明和初始化,完整修正后的代码如下:
Dim vsoLayer As Visio.Layer Dim vsoLayers As Visio.Layers Set vsoLayers = ActivePage.Layers Set vsoLayer = vsoLayers.Add("Layer1") Dim vsoShapeA1 As Visio.Shape Set vsoShapeA1 = ActivePage.DrawRectangle(1, 5, 5, 1) vsoShapeA1.Cells("Fillforegnd").Formula = "RGB(215,135,131)" vsoShapeA1.BringToFront Dim vsoShapeA2 As Visio.Shape Set vsoShapeA2 = ActivePage.DrawRectangle(2, 6, 6, 1) vsoShapeA2.Cells("Fillforegnd").Formula = "RGB(215,135,131)" vsoShapeA2.BringToFront ' 声明并获取Selection对象 Dim vsoSelection As Visio.Selection Set vsoSelection = ActiveWindow.Selection ActiveWindow.DeselectAll vsoSelection.Select vsoShapeA1, visSelect vsoSelection.Select vsoShapeA2, visSelect ' 接收Union返回的合并后形状 Dim vsoUnionShape As Visio.Shape Set vsoUnionShape = vsoSelection.Union ' 将合并后的形状添加到目标图层 vsoLayer.Add vsoUnionShape, 0
补充说明
Layer.Add方法的第二个参数是fPreserveMems,传0表示将形状完全移动到当前图层,传1会保留形状原有图层的关联关系,可根据你的需求调整。- 执行Union操作后,原来的两个矩形形状会被Visio自动删除,不需要额外处理。
内容的提问来源于stack exchange,提问作者Adamklauz
相关产品推荐
相关产品推荐

