如何通过VBA访问Microsoft Word中手动创建的SmartArt对象
解决Word中手动创建的SmartArt无法通过Shapes集合访问的问题
手动通过GUI插入的SmartArt默认是嵌入型对象,属于ActiveDocument.InlineShapes集合,而非Shapes集合——这就是你调用ActiveDocument.Shapes.Count返回0的原因。而用VBA的Shapes.AddSmartArt创建的是浮动形状,自然会出现在Shapes里。
访问手动创建的SmartArt的方法
遍历InlineShapes集合,通过Type属性判断是否为SmartArt(对应枚举值wdInlineShapeSmartArt),示例代码:
Dim inlineShape As InlineShape Dim mySmartArt As SmartArt For Each inlineShape In ActiveDocument.InlineShapes If inlineShape.Type = wdInlineShapeSmartArt Then Set mySmartArt = inlineShape.SmartArt ' 这里可以对SmartArt进行操作,比如输出布局名称 Debug.Print mySmartArt.Layout.Name End If Next inlineShape
可选:将嵌入型SmartArt转为浮动形状
如果希望手动创建的SmartArt也出现在Shapes集合里,可以把它转换成浮动形状:
Dim convertedShape As Shape Set convertedShape = inlineShape.ConvertToShape ' 转换后就能通过Shapes访问了 Debug.Print ActiveDocument.Shapes.Count
关于录制宏空白的问题
Word的宏录制功能对很多UI操作的支持不完善,手动插入SmartArt的操作恰好不在它的捕获范围内,所以会生成空白宏——这是软件本身的局限性,没法通过设置解决,只能靠手动编写VBA代码来处理。
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

