Статьи из блога
Принципы работы с буфером обмена Windows
Статья написана специалистом MS Excel и для тех, кто работает с этой программой. Но общие принципы применимы и для разработчиков макросов под Word. Поэтому я и решил заказать перевод этой статьи и разместить ее в блоге. Надеюсь, она будет полезна вам.
На данной странице описываются некоторые методы, используемые в Visual Basic For Applications (VBA) для копирования данных в буфер обмена Windows, а также для получения данных из него. В VBA вы можете копировать или вставлять лишь текстовые данные.
Для того, чтобы скопировать данные непосредственно из ячейки рабочей таблицы в буфер обмена Windows, необходимо использовать метод COPY объекта Range, например: Range (“A1”).Copy. Однако скопировать в буфер обмена другие данные, такие как переменные, ссылки на ячейки, названия листов и т.д., не так-то просто.
В VBA не существует универсальных функций PutOnClipboard и GetOffClipboard, поэтому нам необходимо их создать, чем мы здесь и займемся. В ходе создания этих функций мы обратим внимание, каким образом VBA взаимодействует с буфером обмена Windows.
Так как данные функции используют переменную типа DataObject, то в вашем проекте VBA должна быть установлена ссылка на объектную библиотеку Microsoft Forms 2.0.
Копирование в буфер обмена
Для того чтобы получить доступ к буферу обмена из VBA, необходимо декларировать промежуточный объект типа DataObject. Если ваша процедура VBA будет работать с буфером обмена, необходимо заявить НОВЫЙ объект DataObject следующим образом:
Dim MyDataObj As New DataObject
Метод SetText переменной DataObject используется для хранения текстовых и числовых значений. Например:
MyDataObj.SetText "This Is A Text String"
или
MyDataObj.SetText 123.456
Таким образом, содержимому MyDataObj присваивается определенное значение. Для того чтобы скопировать содержимое переменной MyDataObj в буфер обмена Windows, необходимо использовать метод PutInClipboard.
MyDataObj.PutInClipboard
Вставка из буфера обмена
Для вставки содержимого буфера обмена, необходимо вызвать следующий метод:
MyDataObj.GetFromClipboard
Таким образом, переменной MyDataObj присваивается содержимое буфера обмена Windows.
Метод GetText является обратным методу SetText. Этот метод возвращает содержимое DataObject в другую переменную. Например:
Dim MyVar As Variant MyVar = MyDataObj.GetText
Используя вышеперечисленное, мы можем создать в VBA следующие процедуры::
Public Sub PutOnClipboard(Obj As Variant) Dim MyDataObj As New DataObject MyDataObj.SetText Format(Obj) MyDataObj.PutInClipboard End Sub Public Function GetOffClipboard() As Variant Dim MyDataObj As New DataObject MyDataObj.GetFromClipboard GetOffClipboard = MyDataObj.GetText() End Function Public Sub ClearClipboard() Dim MyDataObj As New DataObject MyDataObj.SetText "" MyDataObj.PutInClipboard End Sub
Я достаточно часто использую эти процедуры для того, чтобы поместить формулу из активной ячейки в буфер обмена. Это позволяет осуществлять копирование и вставку таким образом, чтобы Excel при этом не изменял ссылки на ячейки. Возможно, будет полезно внести эти процедуры в список команд выпадающего меню правой кнопки мыши.
Sub CopyFormula() Dim x As New DataObject x.SetText ActiveCell.Formula x.PutInClipboard End Sub Sub PasteFormula() On Error Resume Next Dim x As New DataObject x.GetFromClipboard ActiveCell.Formula = x.GetText End Sub
Очистка буфера обмена
Для полной очистки буфера обмена необходимо осуществить несколько вызовов API:
Declare Function CloseClipboard Lib "user32" () As Long Declare Function EmptyClipboard Lib "user32" () As Long Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Sub ClearClipboard() OpenClipboard 0& EmptyClipboard CloseClipboard End Sub
Метки: API | excel | буфер обмена | макросы
Просмотров: 40057
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 полезных заметок о колонтитулах
- 25 + лучших бесплатных программ для создания слайд-шоу в 2022 году
- 3 способа очистки списка недавно открытых документов
- 45 лучших бесплатных программных инструментов для редактирования видео в 2022 году
- Microsoft Office 2019 - особенности, где скачать
- Microsoft Office 2019 Professional Plus для Windows и Mac OS
- Microsoft Office: популярные команды на одной вкладке
- Office 2007 и бесплатный переход на Office 2010
- Ribbon XML Editor — программа редактирования интерфейса Word 2007, 2010
- RuStore: откройте двери в мир российских мобильных приложений
- SQL для начинающих: изучите SQL онлайн за 9 часов
- Word 2007: полотно, рисунки, линии
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение всех открытых документов
- Автоматическое сохранение документа при его закрытии
- Автотекст и Word 2007
- Автотекст с последовательной нумерацией
- Азбука MS Office 2007
Комментариев: 4
Сложновато будет, если человек не обладает навыками уверенного пользователя.
Отлично. Мне помогло. А то спрашивал, как в буфер вставить из ворда, и два ответа: Clipboard.SetText или Windows API. Объекта Clipboard просто нет в вордовском VBA, а через API не получилось. А методом просто и быстро. Спасибо.
сложновато не получается осмыслить сразу
подскажите, плиз, как включить в формулу копирование определённой ячейки?