-1

为了澄清,我的公司使用除了复选框之外的填写表单字段中涵盖的 Microsoft Word 2016 应用程序。表单字段可以包含数字、日期和常规文本,如下所示:

测试表单字段选项

由于新的 SOP,我们已经创建了一个宏来消除每个 FormField 中的帮助文本,整个活动文档如下所示:

Sub FillInHelpRemoval()
Dim fld As FormField
    For Each fld In ActiveDocument.FormFields
            fld.StatusText = ""
    Next
End Sub

我遇到的问题是试图弄清楚如何在上面的宏中添加一种循环遍历每个表单字段的方法,跳过复选框,将每个复选框更改为具有以下属性...

TextInput.EditType Type:=wdRegularText, Default:="", Format:=""

...无论TextInput.EditType 类型wdNumberText还是wdDateText

这将有助于消除处理我们工作所需的更多点击和步骤。

4

1 回答 1

0

看来我的主管想出了一个可以满足我们需求的代码,但是,所有包含的代码对于宏的执行来说可能不是必需的,但他害怕删除任何东西。哈哈!

但我会将它包含在这里,以供那些将来寻找类似 VBA 分辨率的人,甚至是那些能够澄清它并减少编码混乱的人使用。

Sub FillInHelpRemoval()

Dim objFld As FormField
Dim intCount, intLoop As Integer
Dim intNum, intText, intDate, intCheck As Integer
Dim intLen As Integer
Dim intLoop2 As Integer
Dim lngStr As Long


For Each objFld In ActiveDocument.FormFields
     intCount = intCount + 1
Next

If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect

On Error Resume Next
For intLoop = 1 To intCount
    Select Case True
    Case ActiveDocument.FormFields(intLoop).Type = 70 'text
        ActiveDocument.FormFields(intLoop).Select

        If ActiveDocument.FormFields(intLoop).TextInput.Type = wdDateText Then
             ActiveDocument.FormFields(intLoop).Select
            With Selection.FormFields(1)

                With .TextInput
                    .EditType Type:=wdRegularText, Default:="", Format:=""
                End With

            End With

            intDate = intDate + 1
        Else
            If ActiveDocument.FormFields(intLoop).TextInput.Type = wdNumberText Then
                 ActiveDocument.FormFields(intLoop).Select
                With Selection.FormFields(1)

                    With .TextInput
                        .EditType Type:=wdRegularText, Default:="", Format:=""
                    End With
                                                                                                                                                                                                                                            End With
                intNum = intNum + 1

            End If
        End If

    Case Else
        Debug.Print ActiveDocument.FormFields(intLoop).Type
    End Select
Next intLoop

'Call FillInHelpRemoval

For Each objFld In ActiveDocument.FormFields
    objFld.Select
    With Selection.FormFields(1)
        .StatusText = ""
    End With

    Next
End Sub
于 2017-02-14T20:11:29.960 回答