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

如何通过VBA填充Type5(wdContentControlBuildingBlockGallery)内容控件?

解决Word VBA填充wdContentControlBuildingBlockGallery(Type5)控件的问题

问题根源

wdContentControlBuildingBlockGallery(Type=5)属于构建块库控件,和下拉列表控件(Type=3)的机制完全不同——它根本没有DropdownListEntries属性,所以你之前写的cc.DropdownListEntries(1).Text必然会报错。

两种解决方案

根据你的需求,提供两种可行的实现方式:

1. 插入控件关联构建块库的第一个构建块

如果你的目标是调用该控件预设构建块库中的第一个内容,可以通过模板的构建块集合获取并插入:

ElseIf cc.Type = 5 Then
    Dim bbColl As BuildingBlocks
    ' 获取控件绑定的构建块分类集合
    Set bbColl = wrdDoc.AttachedTemplate.BuildingBlockTypes(cc.BuildingBlockType).Categories(cc.BuildingBlockCategory).BuildingBlocks
    
    ' 集合不为空时插入第一个构建块
    If bbColl.Count > 0 Then
        bbColl(1).Insert cc.Range, True
    End If
End If

2. 直接填充自定义文本

如果不需要依赖预设构建块,只是想给控件填充指定文本,直接用你熟悉的Range.Text即可,逻辑和处理其他控件一致:

ElseIf cc.Type = 5 Then
    ' 示例:从工作表取值,也可以直接写死文本
    cc.Range.Text = ThisWorkbook.Sheets("Stella").Cells(XX, XX).Value
End If

整合后的完整代码

把方案整合到你的原有代码中,示例如下:

For Each cc In wrdDoc.ContentControls
    If cc.Title = "DockID" Then
        cc.Range.Text = ThisWorkbook.Sheets("Stella").Cells(20, 1).Value
    ElseIf cc.Title = "Adress" Then
        cc.Range.Text = ThisWorkbook.Sheets("Stella").Cells(10, 1).Value
    ElseIf cc.Title = "Postnr" Then
        cc.Range.Text = ThisWorkbook.Sheets("Stella").Cells(11, 1).Value
    ElseIf cc.Title = "Namn" Then
        cc.Range.Text = ThisWorkbook.Sheets("Stella").Cells(4, 1).Value
    ElseIf cc.Title = "Date" Then
        cc.Range.Text = Format(Date, "yyyy-mm-dd")
    ElseIf cc.Title = "dueDate" Then
        Dim dueDate As Date
        dueDate = DateAdd("d", 24, Date)
        
        ' 跳过周末,确保到期日为工作日
        While Weekday(dueDate, vbMonday) >= 6
            dueDate = DateAdd("d", 1, dueDate)
        Wend
        
        cc.Range.Text = Format(dueDate, "yyyy-mm-dd")
    ElseIf cc.Type = 5 Then
        ' 二选一:要么插入构建块,要么直接设置文本
        ' --- 插入构建块的方式 ---
        Dim bbColl As BuildingBlocks
        Set bbColl = wrdDoc.AttachedTemplate.BuildingBlockTypes(cc.BuildingBlockType).Categories(cc.BuildingBlockCategory).BuildingBlocks
        If bbColl.Count > 0 Then
            bbColl(1).Insert cc.Range, True
        End If
        
        ' --- 直接设置文本的方式(注释上面的代码后启用)---
        ' cc.Range.Text = "你需要填充的文本内容"
    End If
Next cc

注意事项

  • 使用构建块方式时,要确保控件的BuildingBlockCategory和BuildingBlockType配置正确,且模板中存在对应的构建块
  • 直接设置文本的方式会覆盖控件原有内容,适合不需要依赖预设构建块的场景

内容的提问来源于stack exchange,提问作者Ben Dover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:07:26