VBA Копировать в буфер обмена

В этой статье будет показано, как использовать VBA для копирования элементов в буфер обмена.

Может быть, в какой-то момент мы захотим скопировать информацию в Excel VBA и сохранить ее для использования в другом приложении или в другое время, когда макрос Excel перестал работать. Как только макрос перестает работать, информация, которая хранится в переменной или переменных, перестает существовать и больше не может быть получена. Решить эту проблему можно, скопировав эту информацию в буфер обмена.

Копирование в буфер обмена с помощью библиотеки объектов HTML

Самый простой способ использовать буфер обмена в Excel VBA - вызвать библиотеку объектов HTML.

1234567 Sub StoreData ()Dim varText как вариантDim objCP как объектvarText = "Некоторый скопированный текст"Установите objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "текст", varTextКонец подписки

Поскольку мы используем позднее связывание, объявляя переменную objCP как объект, нам не нужно добавлять ссылку на Excel, чтобы эта процедура работала.

Если бы мы сейчас переключились на нашу таблицу Excel и нажали «Вставить», текст «Некоторые скопированные данные» был бы вставлен в выбранную ячейку.

Если бы мы превратили эту процедуру выше в функцию, мы могли бы передать текст, который будет скопирован, как переменную.

12345 Функция StoreData (varText As Variant) как строкаDim objCP как объектУстановите objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "текст", varTextКонечная функция

Затем мы могли бы вызывать эту функцию несколько раз в нашем коде VBA, когда нам нужно скопировать текст в буфер обмена. Поэтому текст не будет жестко закодирован в коде VBA.

123 Sub CopyData ()StoreData "Некоторый скопированный текст"Конец подписки

Мы также можем использовать объект HTML для возврата текста из буфера обмена, то есть вставки. Для этого мы используем GetData, а не метод SetData.

12345 Функция ReturnData ()Dim objCP как объектУстановите objCP = CreateObject ("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData («текст»)Конечная функция

Затем мы можем вызвать эту функцию, чтобы вернуть данные, хранящиеся в буфере обмена.

123 Sub PasteData ()MsgBox ReturnDataКонец подписки

Изящный трюк - объединить две функции вместе, чтобы мы могли использовать одну и ту же функцию для копирования и вставки данных, в зависимости от того, отправляем ли мы данные в буфер обмена или хотим ли мы получить данные из буфера обмена.

1234567891011 Функция StoreOrReturnData (необязательный strText как строка) как строкаDim varText как вариантDim objCP как объектУстановите objCP = CreateObject ("HtmlFile")varText = strTextЕсли strText "" ТогдаobjCP.ParentWindow.ClipboardData.SetData "текст", varTextЕщеStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData («текст»)Конец, еслиКонечная функция

В приведенном выше коде мы можем сделать переменную strText необязательной - это означает, что если мы хотим скопировать данные, мы включим текст, который будет скопирован, но если мы хотим вставить данные, мы исключим его.

Затем мы назначим строковую переменную (strText) переменной Variant, чтобы она сохранялась в методе SetData объекта HTML File.

Чтобы скопировать данные, мы можем использовать эту процедуру, обратите внимание, что мы включаем текст, который нужно скопировать.

123 Sub CopyData ()StoreOrReturnData "SomeCopiedText"Конец подписки

Чтобы вставить данные, мы можем использовать эту процедуру. В окне сообщения отобразится значение, хранящееся в буфере обмена.

123 Sub PasteData ()MsgBox StoreOrReturnDataКонец подписки

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave