重置损坏的 Word 文档的表单域

Reset formfields corrupts Word document

我有一个大型动态 Word 宏,上面有很多表单域。 运行 需要很长时间,到目前为止,最耗时的部分是在映射之前清除所有表单域。现在我正在遍历它们并单独设置它们=“”。我找到了一种更快的方法,但它总是会损坏文档。

1) 当前:

For Each fld In doc.FormFields
    If fld.Type = wdFieldFormTextInput And fld.Result <> "" Then
        fld.Result = ""
    ElseIf fld.Type = wdFieldFormCheckBox Then
        fld.CheckBox.Value = False
    End If
Next

2) 尝试过:

ActiveDocument.ResetFormFields

和 3)

Unload Me

在命令按钮单击事件中

1) 每次至少需要一分钟 2) 几乎是即时的但损坏了文件(错误说 "Word has encountered a problem. You will not be able to undo this action...") 3) 抛出错误-“361:无法加载或卸载此对象”

我要么想要 2) 工作,要么找到任何更快的方法来清除表单域。 谢谢你的时间。

参考(2):与其说这是一条错误信息,不如说是一条警告,并且没有文件损坏。当文档不受保护时,Word 总是会丢失撤消列表,这就是使用此方法在幕后发生的情况。

我想到了两种方法。一种是禁用警报,这应该会抑制警告。另一种是模拟取消保护的用户操作,然后 re-protecting 不保存当前表单字段条目。

要抑制警告(这不会影响真正的错误消息):

Application.DisplayAlerts = wdAlertsNone 

取消保护然后重新保护文档而不保存用户输入:

Sub UnprotectReprotectToResetFields()
    Dim doc As Word.Document

    Set doc = ActiveDocument

    If doc.ProtectionType <> wdNoProtection Then
        doc.Unprotect
    End If
    doc.Protect wdAllowOnlyFormFields, False

End Sub