我有一个很大的动态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遇到问题。您将无法撤消此操作...”) 3)引发错误-“ 361:无法加载或卸载此对象”
我要么希望2)正常工作,要么希望找到更快的方法来清除表单域。 感谢您的宝贵时间。
答案 0 :(得分:1)
请参阅(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