You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:57:05