У цій статті буде показано, як використовувати VBA для копіювання елементів у буфер обміну.
Можливо, ми хочемо скопіювати інформацію в Excel VBA та зберегти її для використання в іншій програмі або в інший час, коли макрос Excel перестане працювати. Як тільки макрос припиняє працювати, інформація, що зберігається у змінній або змінних, припиняє існування і більше не може бути отримана. Спосіб вирішення цієї проблеми - скопіювати цю інформацію до буфера обміну.
Копіювання в буфер обміну за допомогою бібліотеки об’єктів HTML
Найпростіший спосіб використання буфера обміну в Excel VBA - викликати бібліотеку об’єктів HTML.
1234567 | Sub StoreData ()Затемнити varText як варіантЗатемнити objCP як об'єктvarText = "Деякий скопійований текст"Встановити objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "текст", varTextEnd Sub |
Оскільки ми використовуємо пізнє прив’язування, оголошуючи змінну objCP як об’єкт, нам не потрібно додавати посилання на Excel, щоб ця процедура працювала.
Якби тепер ми перейшли на наш робочий аркуш Excel і натиснули Вставити, текст «Деякі скопійовані дані» буде вставлено до вибраної комірки.
Якби ми змінили цю процедуру вище на функцію, ми могли б передати текст для копіювання як змінну.
12345 | Функція StoreData (varText як варіант) у вигляді рядкаЗатемнити objCP як об'єктВстановити objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "текст", varTextФункція завершення |
Потім ми могли б викликати цю функцію кілька разів у нашому коді VBA як і коли нам потрібно скопіювати текст у буфер обміну. Тому текст не буде жорстко закодований у код VBA.
123 | Sub CopyData ()StoreData "Деякі скопійовані тексти"End Sub |
Ми також можемо використовувати HTML -об'єкт для повернення тексту з буфера обміну - тобто вставлення. Для цього ми використовуємо метод GetData, а не метод SetData.
12345 | Функція ReturnData ()Затемнити objCP як об'єктВстановити objCP = CreateObject ("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData ("текст")Функція завершення |
Потім ми можемо викликати цю функцію, щоб повернути дані, що зберігаються у буфері обміну.
123 | Sub PasteData ()MsgBox ReturnDataEnd Sub |
Точним прийомом було б поєднання двох функцій разом, щоб ми могли використовувати одну і ту ж функцію для копіювання та вставлення даних, залежно від того, чи надсилаємо ми дані у буфер обміну, чи якщо ми хочемо отримати дані з буфера обміну.
1234567891011 | Функція StoreOrReturnData (необов’язковий strText як рядок) як рядокЗатемнити varText як варіантЗатемнити objCP як об'єктВстановити objCP = CreateObject ("HtmlFile")varText = strTextЯкщо strText "" ТодіobjCP.ParentWindow.ClipboardData.SetData "текст", varTextІнакшеStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData ("текст")Закінчити ЯкщоФункція завершення |
У наведеному вище коді ми можемо зробити змінну strText необов’язковою - це означає, що якщо ми хочемо скопіювати дані, ми включимо текст, який потрібно скопіювати, але якщо ми хочемо вставити дані, ми виключимо її.
Потім ми присвоїмо рядкову змінну (strText) змінній Variant, щоб вона зберігалася у методі SetData об’єкта файлу HTML.
Щоб скопіювати дані, ми можемо скористатися цією процедурою. Зауважте, що ми включаємо текст для копіювання.
123 | Sub CopyData ()StoreOrReturnData "SomeCopiedText"End Sub |
Щоб вставити дані, ми можемо скористатися цією процедурою. У вікні повідомлення буде показано значення, збережене у буфері обміну.
123 | Sub PasteData ()MsgBox StoreOrReturnDataEnd Sub |