Копирование объекта
До сих пор я говорил о копировании выделенного текста. И делал я это потому, что копирование текста это наиболее типичная задача, возникающая при работе с документом Word. Однако понятно, что реально в документе Word выделяется не текст, а некоторая область документа, - объект Range, если говорить в терминах объектов. Я напомню, что объект Range может быть устроен столь же сложно, как и сам документ, и, наряду с текстом, содержать самые разные компоненты, например, рисунки. Стандартная реализация Copy - Paste фактически работает именно с объектом Range. Давайте напишем и мы такую же реализацию. Вот как задается буфер и макросы в подобной реализации:
'Буфер, позволяющий сохранять объект Public ObjectBuffer As Range
Public Sub CopyObject() 'Этот макрос копирует выделенный объект в буфер Set ObjectBuffer = Selection.Range End Sub
Public Sub PasteObject() 'Этот макрос выполняет операцию, обратную копированию. 'Объект из буфера вставляется в точку, заданную курсором. 'Поскольку объект может быть сложным и содержать, например, 'рисунки, то используется техника копирования через стандартный буфер! ObjectBuffer.Copy Selection.PasteSpecial
End Sub
Листинг 2.4.
(html, txt)
Реализация макросов в этом случае даже более проста, чем в предыдущем случае. Однако, заметьте, она построена на использовании возможностей стандартного буфера и таких мощных методов работы с ним, как методы Copy и PasteSpecial. Стоит обратить внимание на то, что побочным эффектом этой реализации является изменение содержимого буфера. Конечно, можно было бы запоминать и восстанавливать его содержимое, но вряд ли стоит этим заниматься, поскольку данная реализация вряд ли имеет преимущества по сравнению со стандартной реализацией. Так что из трех пар приведенных макросов, практическую пользу может иметь самая первая и самая простая пара макросов, работающих с простым текстом.