如何在使用模板的 word 文档中创建下拉列表?

Posted

技术标签:

【中文标题】如何在使用模板的 word 文档中创建下拉列表?【英文标题】:How do I create a dropdown list in a word doc that is using a template? 【发布时间】:2019-04-12 15:26:31 【问题描述】:

我正在尝试在使用模板生成的 word 文档中创建一个下拉列表(这一切都是通过单击访问中的按钮完成的)。当代码运行时,它会停在创建下拉列表的行并给出以下错误:

运行时错误“445”: 对象不支持此操作

我已将问题缩小到这一行:

设置 doc = oWord.Documents.Add(strWordTemplate)

从 'Add()' 中删除 'strWordTemplate' 时,下拉菜单似乎没有问题。但这只会给我一个带有下拉列表的空白文档。如何在通过模板生成的文档中放置下拉菜单?

strWordTemplate 是 word 日历模板的文件位置。 TemplatePath 是保存单词模板的全局字符串常量。理想情况下,我会在日历的每个单元格中放置相同的下拉列表(相同的值),但我想弄清楚如何让模板和下拉列表首先显示在同一个文档中

Public Sub MakeCalendar()
Dim strWordTemplate As String
Dim oWord As Object
Dim doc As Word.Document

    'Open a Word Doc With the Template
    Set oWord = CreateObject("Word.application")
    oWord.Visible = False
    oWord.DisplayAlerts = False

    strWordTemplate = TemplatePath & "Calendar.dot"
    Set doc = oWord.Documents.Add(strWordTemplate) 'template is added here

    doc.ContentControls.Add wdContentControlDropdownList 'having the template added causes this line to fail

    'Show the Word Doc
    oWord.DisplayAlerts = True
    oWord.Visible = True

End Sub

【问题讨论】:

您显示的命令会将文档中的所有内容替换为内容控件。尝试声明和实例化一个Word.Range 对象并将控件的目标位置分配给它。而且我在显示的代码中看不到与表格有关的任何内容 - 究竟需要发生什么还不清楚。 我编辑了帖子以修正我的措辞错误。另外,我是否只需 Dim temp As Word.Range 然后: doc.temp.contentcontrols... 还是还有其他步骤? 如果您正在回答某人,请记住使用@“ping”他们,例如@BoatHouse,否则不会通知此人。而且,是的,内容控制是 2007 年的新内容。 【参考方案1】:

从 excel 中尝试了您的(修改后的)代码,因为我认为自己在 Access 中为零(更准确地说,我曾经从 Access 中运行)。它有效,希望能解决您的问题,如下所示

并且代码是不言自明的

Public Sub MakeCalendar()
Dim strWordTemplate As String
Dim oWord As Object
Dim doc As Word.Document

Dim TemplatePath As String
Dim Tbl As Table, cl As Cell, Rw As Row
'Modify/Delete to your requirement, but take care that last slash ("\") is in place in the path
'it is the most probable cause of error in your code
'It in first place it failed to open the template, but does not give alerts
'as DisplayAlerts set to false and then gives eroor 424 on next line
TemplatePath = "C:\users\user\desktop\"

    'Open a Word Doc With the Template
    Set oWord = CreateObject("Word.application")
    oWord.Visible = True                     ' modify to your choice
    oWord.DisplayAlerts = True               ' modify to your choice

    strWordTemplate = TemplatePath & "Calendar.dotx"
    Set doc = oWord.Documents.Add(strWordTemplate) 'template is added here
    Set Tbl = doc.Tables(1)                      ' Modify to your requirement

    For Each Rw In doc.Tables(1).Rows
    For Each cl In Rw.Cells
    cl.Range.ContentControls.Add wdContentControlDropdownList
    Next cl
    Next Rw
     ' Or use your original code
    'doc.ContentControls.Add wdContentControlDropdownList 'having the template added causes this line to fail

    'Show the Word Doc
    oWord.DisplayAlerts = True
    oWord.Visible = True

End Sub

【讨论】:

刚刚看到这个。我试了一下你的代码,但我仍然遇到同样的错误。我什至将模板从其原始位置移动到桌面,并将 strWordTemplate 硬编码到该位置。仍然有同样的问题。如果有任何帮助,设置显示警报并显示为 True 给了我 2 个单独的单词文档。一张带桌子,一张空白一张。问题是“.dot”而不是“.dotx”吗? 我实际上尝试将“.dot”文件更改为“.dotx”并解决了问题。我猜这个下拉菜单是 word 2007 的新内容,所以 2003 模板不会接受该命令

以上是关于如何在使用模板的 word 文档中创建下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章

在剑道模板中创建剑道下拉列表

如何更改在VBA中创建的下拉列表的字体大小和格式

怎样在word中提取模板

如何在 Flutter 中创建自定义下拉列表?

如何使用 .kv 文件在 kivy 中创建下拉列表

如何使用 React js JSX 在下拉列表中创建年份列表