Поделиться через


Событие 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 и обратная связь.