Копіювання VBA у буфер обміну

У цій статті буде показано, як використовувати 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

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

wave wave wave wave wave