В этой статье будет показано, как использовать 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Конец подписки |