Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 重置表单字段会损坏Word文档_Vba_Ms Word_Form Fields - Fatal编程技术网

Vba 重置表单字段会损坏Word文档

Vba 重置表单字段会损坏Word文档,vba,ms-word,form-fields,Vba,Ms Word,Form Fields,我有一个很大的动态Word宏,上面有很多表单字段。运行需要很长时间,到目前为止,最耗时的部分是在映射表单字段之前清除所有表单字段。现在我正在循环它们,并将它们分别设置为“”。我找到了一个更快的方法,但它总是破坏文档 1) 当前: (三) 在命令按钮中单击事件 1) 每次至少需要一分钟 2) 几乎是即时的,但会损坏文档(错误为“Word遇到问题。您将无法撤消此操作…”) 3) 引发错误-“361:无法加载或卸载此对象” 我要么想工作,要么想找到更快的方法清除表单字段。 感谢您的时间。参考(2):这

我有一个很大的动态Word宏,上面有很多表单字段。运行需要很长时间,到目前为止,最耗时的部分是在映射表单字段之前清除所有表单字段。现在我正在循环它们,并将它们分别设置为“”。我找到了一个更快的方法,但它总是破坏文档

1) 当前:

(三)

在命令按钮中单击事件

1) 每次至少需要一分钟 2) 几乎是即时的,但会损坏文档(错误为“Word遇到问题。您将无法撤消此操作…”) 3) 引发错误-“361:无法加载或卸载此对象”

我要么想工作,要么想找到更快的方法清除表单字段。 感谢您的时间。

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

我想到了两种方法。一种是禁用警报,这将抑制警告。另一种方法是模拟用户取消保护的操作,然后在不保存当前表单字段条目的情况下重新保护

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

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
取消保护,然后在不保存用户输入的情况下重新保护文档:

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
Sub unprotectReprotectResetFields()
Dim doc作为Word.Document
Set doc=ActiveDocument
如果doc.ProtectionType wdNoProtection,则
解除保护
如果结束
文档保护wdAllowOnlyFormFields,False
端接头
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