Событие Document.XMLBeforeDelete (Word)
Происходит, когда пользователь удаляет XML-элемент из документа. Если из документа одновременно удаляется несколько элементов (например, при вырезании и вставке XML), событие срабатывает для каждого удаленного элемента.
Синтаксис
expression. XMLBeforeDelete (DeletedRange, OldXMLNode, InUndoRedo)
Выражение Переменная, представляющая объект Document .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
DeletedRange | Обязательный | Диапазон | Содержимое удаляемого XML-элемента. Если удаляется только элемент и не связан текст, параметр DeletedRange не будет существовать и, следовательно, будет иметь значение Nothing. |
OldXMLNode | Обязательный | Xmlnode | Удаляемый узел. |
InUndoRedo | Обязательный | Boolean | Значение true указывает, что действие было выполнено с помощью функции отмены или повтора в Microsoft Word. |
Замечания
Представляет объект Document , объявленный с помощью ключевого слова WithEvents в модуле класса. Сведения об использовании событий с объектом Document см. в разделе Использование событий с объектом Document.
Если параметр InUndoRedo имеет значение True, никогда не изменяйте XML-код в документе во время выполнения событий XMLAfterInsert и XMLBeforeDelete .
Если параметр InUndoRedo имеет значение False, можно вставить и удалить XML-код в документ, но будьте осторожны, чтобы события XMLAfterInsert и XMLBeforeDelete не пытались отменить друг друга, что приведет к бесконечному циклу. Можно предотвратить бесконечные циклы с помощью глобальной логической переменной и проверить это в начале обработчика ошибок, как показано в следующем примере.
Dim blnIsXMLDeleteRunning As Boolean
Private Sub Document_XMLBeforeDelete(ByVal DeletedRange As Range, _
ByVal OldXMLNode As XMLNode, ByVal InUndoRedo As Boolean)
If blnIsXMLDeleteRunning = False Then
blnIsXMLDeleteRunning = True
'Insert your event code here.
Else
Exit Sub
End If
End Sub
Пример
Следующий пример выполняется при удалении XML-элемента. Если элемент содержит текст, отображается сообщение с вопросом, хочет ли пользователь удалить текст, содержащийся в элементе. Если пользователь в ответ нажмет кнопку Нет, содержимое элемента копируется в буфер обмена.
Private Sub Document_XMLBeforeDelete(ByVal DeletedRange As Range, _
ByVal OldXMLNode As XMLNode, ByVal InUndoRedo As Boolean)
Dim intResponse As Integer
If InUndoRedo = False Then
If Not DeletedRange Is Nothing Then
intResponse = MsgBox("Are you sure you want to delete the text " _
& vbCrLf & DeletedRange.Text, vbYesNo)
If intResponse = vbNo Then
DeletedRange.Copy
MsgBox "The text has been copied to the Clipboard." & vbCrLf & _
"Position your cursor where you want to insert it, " & _
vbCrLf & " and click Paste on the Edit menu."
End If
End If
End If
End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.