好的,所以我有一个单词2013年文档,当用户填写表单时,该文档将被限制编辑。
在此表单的最后是一个复选框,选中此复选框后,日期字段将自动填入今天的日期。
所以到目前为止我所做的是在用户退出任何内容控件时编写了一个宏,执行以下操作。我应该澄清填写日期的代码很好:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, _
Cancel As Boolean)
Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
// This works fine
If cc.Title = "ConfirmBox" Then
If cc.Checked = True Then
With ActiveDocument.Bookmarks("DateBox").Range
.InsertAfter Format(Date, "dd mm yyyy")
End With
// This doesn't work
Else
Set datebox= ActiveDocument.Bookmarks("DateBox").Range
datebox.Text = "test"
End If
Exit For
End If
Next cc
End Sub
我想要发生的是,当用户取消选中该复选框时,任何文本都会从字段中清除,因此基本上它会自行重置。实现这一目标的最佳方法是什么?
当我尝试按照上面代码中的方式进行操作时,我收到错误代码' 6028'说"范围无法删除"
答案 0 :(得分:0)
当我运行上面的代码时,它会在选中该框时正确插入日期。清除框时,它会插入文本,但不会覆盖日期。下次选中此框时,代码将失败,因为书签不存在。
Else语句中的文本没有覆盖日期的原因是日期是在书签之后而不是在里面插入的。您可能选择了此选项,因为将文本插入书签范围会导致删除书签。这就是为什么如果再次选中该框,代码将失败。
这是一种非常常见的情况,解决方案是存储书签范围,然后插入文本,然后重新插入书签,如下所示:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
' This works fine
If cc.Title = "ConfirmBox" Then
If cc.Checked = True Then
Dim BMRange As Range
'Identify current Bookmark range and insert text
Set BMRange = ActiveDocument.Bookmarks("DateBox").Range
BMRange.Text = Format(Date, "dd mm yyyy")
'Re-insert the bookmark
ActiveDocument.Bookmarks.Add "DateBox", BMRange
Else
'Identify current Bookmark range and insert text
Set BMRange = ActiveDocument.Bookmarks("DateBox").Range
BMRange.Text = "test"
'Re-insert the bookmark
ActiveDocument.Bookmarks.Add "DateBox", BMRange
End If
Exit For
End If
Next cc
End Sub
如果您希望书签保留在文档中以备将来使用,那么每次更新书签中的文本时,您都需要确保遵循相同的模式。