vba - 使用相同的名称/标签从用户窗体文本框填充 MS-Word ContentControl 文本框?

标签 vba ms-word word-2016

我已在 Microsoft Word(2016、64 位、Windows 10)中创建了 Visual Basic for Applications 程序

它由一个带有大约 30 个文本框的用户表单和一个提交按钮组成。每个文本框都有一个唯一的名称和标签。

我在word文档中也有相同数量的ContentControl文本框,每个文本框都有与其对应的UserForm TextBox相同的标题和标签。

我追求的是一种更好的方法,当用户单击“提交”时,从用户表单文本框中填充文档文本框。

我目前通过为每个文本框键入 3 行代码来完成此操作,但这很乏味。我每次都会复制并粘贴 3 行代码,但每次都必须编辑每行的一小部分。

我考虑过使用循环,如下面的代码所示,其中我使用变量 x 按名称复制文本框,但我不确定如何继续。

Dim doc As Document
Dim ccs As ContentControls
Dim cc As ContentControl
Set doc = ActiveDocument

For … 
' Somehow find each text box, put the name of one into variable x then

    Set ccs = doc.SelectContentControlsByTag(x)
    Set cc = ccs(1)
    cc.Range.Text = x.Text

Next

提前谢谢您!

最佳答案

用户窗体文本框可通过 Controls 类访问,而文档 ContentControl 文本框可通过 ContentControls 属性或 SelectContentControlsByTag 函数访问.

无需专门命名文本框,因为它们很容易通过类型来识别。


一种解决方案是循环访问适当的 ContentControls 并按名称/标题复制:

Private Sub cmdSubmit_Click()

  Dim cc As Word.ContentControl

  For Each cc In Word.ActiveDocument.ContentControls
    If cc.Type = Word.WdContentControlType.wdContentControlText Then
      cc.Range.Text = Me.Controls(cc.Title).Text
    End If
  Next cc

End Sub

如果您使用富文本内容控件,则需要将 wdContentControlText 替换为 wdContentControlRichText


另一种解决方案是循环遍历适当的文本框并按标签复制:

Private Sub cmdSubmit_Click()

  Dim doc As Word.Document
  Dim cc As Word.ContentControl
  Dim c As MSForms.Control

  Set doc = Word.ActiveDocument
  For Each c In Me.Controls
    If TypeName(c) = "TextBox" Then
      Set cc = doc.SelectContentControlsByTag(c.Tag)(1)
      cc.Range.Text = c.Text
    End If
  Next c

End Sub

关于vba - 使用相同的名称/标签从用户窗体文本框填充 MS-Word ContentControl 文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45576288/

相关文章:

vba - 使用 VBA 将 VBA 代码添加到 MS Access 用户窗体

html - 确定浏览器将下载文件、excel 和 VBA 的位置

MacOS Automator + Applescript 用于将 docx 导出为 pdf 的解决方案

javascript - Office.js 如何插入 2 个内容控件,一个在选择开始处,一个在选择结束处

excel - 将数据从 Excel 传输到预先存在的 Word 表格

vba - SAP的VBA声明结束

php - 使用 PHP 转换 Microsoft Word 特殊字符

.net - 如何退出或关闭(而不是杀死)Word文档(进程)?

error-handling - 区分 `on error goto`发生的两个错误并分别处理