0

我使用交互式内容控件创建了一个 Microsoft Word 表单。这是一个非常长的表单,包含各种字段和字段类型(下拉列表、文本框、组合框、复选框等......)经过几个月和多次编辑后,它以不一致的格式返回给我字段值和占位符文本值。某些字段即使在您填写后仍显示为灰色。其他字段具有完全不灰显的占位符文本。字体的大小、样式和灰色阴影似乎不一致。我可以在设计模式下编辑占位符文本字体样式和大小,但我无法弄清楚如何确保占位符文本变灰(相同的灰色阴影)并且字段值文本不是。此外,我正在考虑使用 VBA 宏自动化该过程。

Sub SetPlaceHolderText()
Dim strText As String
  If Selection.Range.ContentControls.Count = 1 Then
    On Error GoTo Err_Handler
    With Selection.Range.ContentControls(1)
      strText = .PlaceholderText.Value
      .SetPlaceHolderText , , InputBox("Type your new placeholder text below.", _
                              "Define Placeholder Text", strText)
    End With
  Else
    MsgBox "You must select a single ContentControl." & vbCr + vbCr _
           & "Click the ""empty"" or ""title"" tag of the" _
           & " ContentControl you want to modify."
  End If
Exit Sub
Err_Handler:
End Sub

可以在这里找到:https ://gregmaxey.com/word_tip_pages/modify_cc_placeholder_text.html 。

是否可以执行类似的操作来应用默认的 Word 内容控件格式(例如占位符文本采用段落默认格式和一定的灰色阴影,直到它被覆盖,此时它不再变灰)?我有近 80 个采用这种形式的内容控件,并希望简化流程而不必从头开始。我将不胜感激任何建议,无论是使用 VBA 脚本还是 Word 对象属性。谢谢你。

编辑:

我创建了一个简单的宏,它遍历我的字段并更改占位符和值的字体,但它不会更改所有默认值。正如我在评论中提到的,当我选择某些内容时,我会通过选择默认情况下与占位符相同的第一个下拉项返回到占位符,格式会再次重置。这是脚本:

Sub Demo()

Dim cc As ContentControl

For Each cc In ActiveDocument.ContentControls
    If cc.Type = wdContentControlDropdownList Or cc.Type = wdContentControlComboBox Then
        If cc.ShowingPlaceholderText Then
            With cc.Range.Font
                .Name = "Times New Roman"
                .Size = 11
                .ColorIndex = wdGray50
            End With
        Else
            With cc.Range.Font
                .Name = "Times New Roman"
                .Size = 11
                .ColorIndex = wdBlack
            End With
        End If
    End If
Next cc

我完全不熟悉 Microsoft Word,但我能够创建表单并提取数据。但是,其他人对其进行了如此多的更改(这反过来又弄乱了一些构建格式),因此回滚到我的“干净”版本并重新开始将是很多工作。如果可能的话,我想“修复”现有的表格。我还缺少哪些其他 Word 内容控制字体默认设置?

编辑:

循环浏览日期选择器字段并应用标准格式和占位符文本也很好。出于某种原因,当我包括:

If cc.Type = wdContentControlDropdownList Or cc.Type = wdContentControlComboBox Or cc.Type = wdContentControlDate Then

我的日期占位符文本的格式与内容控制值文本的格式相同(在我上面的示例中,它是 wdBlack。)

4

2 回答 2

1

不确定这是否符合您的要求,但看看那里是否有任何有用的东西......

Sub Demo()

    Const DEF_STYLE As String = "myCCStyle"
    
    Dim cc As ContentControl, s As Style, sP As Style
    
    'Adjust the built-in style used by the placeholder text
    With ActiveDocument.Styles("Placeholder text").Font
        .Color = wdColorGreen
        .Size = 11
        .Name = "Times New Roman"
    End With
    
    
    On Error Resume Next
    Set s = ActiveDocument.Styles(DEF_STYLE) 'see if our style exists
    On Error GoTo 0
    'add if not already there
    If s Is Nothing Then Set s = ActiveDocument.Styles.Add(DEF_STYLE, Type:=wdStyleTypeCharacter)
    With s.Font
        'just to be different....
        .Name = "Courier"
        .Size = 15
        .ColorIndex = wdBlue
    End With
    
    'set the default style (for non-placeholder content)
    For Each cc In ActiveDocument.ContentControls
        If cc.Type = wdContentControlDropdownList Or cc.Type = wdContentControlComboBox Then
            cc.DefaultTextStyle = DEF_STYLE
        End If
    Next cc

End Sub
于 2020-07-30T07:02:09.723 回答
1

通过内容控件重置占位符文本循环并将当前控件中的文本写入变量。删除控件中的文本并将占位符文本设置为变量的值。这将重置标志并自动应用占位符文本样式。这也将确保控件行为被重置,以便单击它来替换占位符文本。

Sub ResetCCPlaceholderText()
  Dim cc As ContentControl
  Dim promptText As String
  For Each cc In ActiveDocument.ContentControls
    if cc.Type = wdContentControlDate then
        promptText = cc.Range.Text
        cc.Range.Text = ""
        cc.SetPlaceholderText Text:=promptText
    end if
  Next cc
End Sub
于 2020-07-30T19:13:39.317 回答