word vba 控件退出时的明文
word vba clear text on control exit
好的,所以我有一个 word 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”,表示 "The Range cannot be deleted"
当我运行上面的代码时,它会在选中该框时正确插入日期。清除框时,它会插入文本,但不会覆盖日期。下次选中该框时,代码将失败,因为书签不存在。
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
如果您希望书签保留在文档中以备将来使用,则需要确保每次更新书签中的文本时都遵循相同的模式。
好的,所以我有一个 word 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”,表示 "The Range cannot be deleted"
当我运行上面的代码时,它会在选中该框时正确插入日期。清除框时,它会插入文本,但不会覆盖日期。下次选中该框时,代码将失败,因为书签不存在。
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
如果您希望书签保留在文档中以备将来使用,则需要确保每次更新书签中的文本时都遵循相同的模式。