VBA使用Excel 2016填充Word 2016内容控件

VBA使用Excel 2016填充Word 2016内容控件,excel,vba,ms-word,Excel,Vba,Ms Word,我正在尝试使用Excel填充具有内容控制文本框的Word.dotm文档 在Excel中,我创建word对象并打开文件,但我不知道如何实际访问控件 在Word文档的VBA中,我可以通过 。选择ContentControlsByTitle(“控件”).Item(1)。Range.Text=“…” 但在Excel中使用对象是不起作用的 以下是我在Excel中尝试过的代码: Dim objWord As Object Dim objDoc As Object Dim o

我正在尝试使用Excel填充具有内容控制文本框的Word.dotm文档

在Excel中,我创建word对象并打开文件,但我不知道如何实际访问控件

在Word文档的VBA中,我可以通过

。选择ContentControlsByTitle(“控件”).Item(1)。Range.Text=“…”

但在Excel中使用对象是不起作用的

以下是我在Excel中尝试过的代码:

Dim objWord         As Object
Dim objDoc          As Object
Dim objSelection    As Object
Dim ctrl            As Word.ContentControl

Set objWord = CreateObject("Word.Application")

Set objDoc = objWord.Documents.Add(ThisWorkbook.Path & "\MyDoc.dotm")

objWord.Visible = True

Set objSelection = objWord.Selection

'Doesn't work
objDoc.SelectContentControlsByTitle("control").Item(1).Range.Text = "..."        

'Doesn't work either, but tried nonetheless
For Each ctrl In objDoc.contentcontrols
    If ctrl.Title = "control" Then
        ctrl.Range.Text = "!"
        Exit For
    End If
 Next ctrl
更新:


我没有引用MS Word 16.0对象库。。。Timothy Rylatt提到的早期绑定和复制模板文件而不是直接修改模板文件的技巧现在起作用了,John Korchok的For Each循环也起作用了。它们的添加内容已添加到上述代码中。谢谢大家!

在任何宏中,尤其是在跨程序宏中,避免使用选择对象,而是使用范围对象。有时,使用range对象需要稍微不那么直接的路径来访问控件,例如必须轮询所有内容控件以查找哪个控件具有正确的标题:

Sub SetCCText()
    Dim CC As ContentControl
    For Each CC In ActiveDocument.ContentControls
        If CC.Title = "control" Then
            CC.Range.Text = "Text"
        End If
    Next CC
End Sub

尽管您已将
ctrl
声明为
ContentControl
,但它不是Word内容控件,这就是为什么每个
循环的
都不起作用的原因

如果要使用早期绑定,则需要在变量声明中指定对象类型所属的库。有些库具有同名但完全不同的对象

Dim ctrl As Word.ContentControl
注意:您还应该从Word模板创建文档,而不是直接编辑模板:

Set objDoc = objWord.Documents.Add(ThisWorkbook.Path & "\MyDoc.dotm")

请用您在Excel中尝试过的代码编辑问题,并准确描述“这不起作用”的原因。同样的基本方法应该也能奏效,但“魔鬼在细节中”-你需要向我们展示细节…谢谢Cindy-我刚刚更新了这个问题。别忘了描述出了什么问题-Word是否显示了错误,或者显然什么都没有发生?(这里,objDoc.SelectContentControlsByTitle(“control”).Item(1)。Range.Text=“…”行工作正常。我尝试了您提供的早期绑定方法,但似乎仍然不起作用。我得到“编译错误:无法识别用户定义的类型”当我尝试运行该函数时。使用早期绑定时,需要设置对要使用的库的引用。从“工具”菜单中选择“引用”,然后在列表中找到要使用的库。或者,保持一致,只使用后期绑定,就像使用其他对象变量一样。有关更多信息,请参阅