Оказывается, есть два буфера обмена: буфер обмена 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 может открыть удаленное/внешнее приложение/книгу/документ и скопировать/вставить данные напрямую.
Действительно ли это VBA или вы используете это в VB.NET? –
@MacroMan Я делаю это в Excel, так что да, я использую VBA. Это невозможно в VBA? –
Я только спрашиваю, потому что сообщение об ошибке не похоже на стандартное сообщение об ошибке VBA. –