2016-05-26 2 views
4

Есть ли способ получить несколько элементов из буфера обмена? Я использую что-то вроде этого:Доступ к N-му элементу буфера обмена

Dim clipboard As MSForms.DataObject 
Dim str1 As String 
Dim str2 As String 

Set clipboard = New MSForms.DataObject 

clipboard.GetFromClipboard 
str1 = clipboard.GetText(1) 
str2 = clipboard.GetText(2) 

Однако я получаю сообщение об ошибке, когда я присвоить значение моей второй переменной, говорит следующее:

Run-time error '-2147221404 (800040064)': 
    DataObject:GetText Invalid FORMATETC Structure 

Помощь очень ценится!

+0

Действительно ли это VBA или вы используете это в VB.NET? –

+0

@MacroMan Я делаю это в Excel, так что да, я использую VBA. Это невозможно в VBA? –

+0

Я только спрашиваю, потому что сообщение об ошибке не похоже на стандартное сообщение об ошибке VBA. –

ответ

1

Оказывается, есть два буфера обмена: буфер обмена Windows и буфер обмена Office.

Буфер обмена Office может содержать до 24 элементов (все могут быть одного типа), тогда как буфер обмена Windows может содержать только один элемент каждого типа.

  • Копирование в буфер обмена Windows так же просто, как выделение, то набрав Ctrl-C.
  • Копирование в буфер обмена Office так же просто, как и , выделив затем набрав Ctrl-CC. Буфер обмена Office активен только , если есть хотя бы одно приложение Office, открытое и активное на времени.

В VBA использование MSForms.DataObject позволяет получить доступ к буферу Windows, поэтому доступен только один текстовый элемент. После различных поисков я не могу узнать, как открывать/управлять/копировать/вставлять, используя буфер обмена Office из VBA.

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

В обход вокруг interwebz по этой теме я просмотрел несколько ссылок на использование буфера обмена для копирования данных между разными книгами или между приложениями Office, такими как Excel-to-Word. Для этого вам все равно не нужен буфер обмена, так как VBA может открыть удаленное/внешнее приложение/книгу/документ и скопировать/вставить данные напрямую.

 Смежные вопросы

  • Нет связанных вопросов^_^