控制退出

时间:2015-06-26 16:41:06

标签: vba ms-word word-vba

好的,所以我有一个单词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'说"范围无法删除"

1 个答案:

答案 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

如果您希望书签保留在文档中以备将来使用,那么每次更新书签中的文本时,您都需要确保遵循相同的模式。