Vba excel очистить буфер обмена
Обновлено: 24.11.2024
Я искал формулу и Интернет, но все решения не помогли мне.
Чтобы показать Office Clippoard, у меня работает код:
Как очистить буфер обмена?
Какой код вы используете?
С наилучшими пожеланиями,
Яцек Антек
Факты об Excel
Крисдонтм
Известный участник
Это то, что вы ищете?
яришек
Обычная доска
Спасибо, Chrisdontm, за ответ,
К сожалению, нет.
Я ищу решение для очистки буфера обмена Office, а не буфера обмена Windows.
Что-то вроде этого, но работает во всех версиях Excel (32-разрядная версия, 64-разрядная версия):
Может быть, кто-то нашел что-то для этой темы?
яришек
Обычная доска
Крэггс82
Обычная доска
яришек
Обычная доска
Привет, Craggs82. спасибо за ваше решение.
К сожалению, это не работает.
Это код для 32-битной версии, у меня 64-битная, все мои клиенты используют разные версии офисов.
Может быть, вы знаете, как настроить этот код на 64-битную версию?
РориА
MrExcel MVP, модератор
- 365
- 2019
- 2016
- 2010 ол>
- Окна
- MacOS
Крэггс82
Обычная доска
приведенный мной код адаптирован для работы в 64- и 32-разрядных системах (обратите внимание на ptrsafe).
Это для буфера обмена Windows, хотя для меня это также очищает буфер обмена Office. В этот момент я сделаю шаг назад, чтобы меня отругали за незнание буфера обмена :D
Крэггс82
Обычная доска
приведенный мной код адаптирован для работы в 64- и 32-разрядных системах (обратите внимание на ptrsafe).
Это для буфера обмена Windows, хотя для меня это также очищает буфер обмена Office. На этом этапе я сделаю шаг назад, чтобы меня отругали за незнание буфера обмена :D
яришек
Обычная доска
Хм, РориА, какой код из сообщения номер 3 у вас работал?
У вас есть рабочий?
Как бы вы очистили буфер обмена Microsoft Office с помощью VBA, в частности Word VBA?
Я копирую большое количество данных в буфер обмена и не хочу, чтобы в нем хранились лишние данные.
6 ответов 6
работает в вашей ситуации или этот вариант не подходит?
Спасибо, я видел это раньше, но никогда не пробовал. Это работает и для моего приложения. По сути, он удаляет функцию CutCopy, которая автоматически удаляет данные из буфера обмена.
Стоит отметить, что при этом очищается только буфер обмена Excel. Если у вас есть что-то еще в буфере обмена, это не имеет никакого эффекта. Хорошо для вопроса, но Google задает мне этот вопрос, когда я ищу способ очистить буфер обмена в макросе, для которого мне нужно действительно очистить буфер обмена - и этот ответ с наибольшим количеством голосов на МОЙ вопрос на самом деле не помогите мне.
Видел это в другом посте, и я протестировал его с помощью Word VBA.
Просто скопируйте и вставьте в свой код, когда вам нужно очистить буфер обмена.
Еще одна вещь, которую я заметил, это то, что когда я выхожу из программы, скажем, из Excel, она продолжает спрашивать меня, хочу ли я сохранить данные в буфере обмена. Обходной путь заключается в очистке буфера обмена с помощью указанного выше кода. См. ниже:
Я использовал приведенный выше пример в коде VBA для импорта данных из файла Excel. Смотрите здесь
После копирования этой функции в проект VBA используйте ClearClipboard, чтобы очистить ее.
Спустя годы, но если кто-то ищет, как сделать это в Office 365 под 64-разрядной версией, теперь вам нужно использовать модификации для обратной совместимости, чтобы заставить это работать: Private Declare PtrSafe и LongPtr в качестве двух ваших изменений в этих значения решат проблемы и позволят ему по-прежнему работать.
Быстрое и простое решение, которое я только что использовал, это
Где "MyDoc" – это название документа, который вы используете.
Технически он не очищает буфер обмена, а просто делает его длиной в один символ (при условии, что ваш документ начинается с символов), что предотвращает появление всплывающих окон Word с надоедливыми вопросами.
Пуристам это может не понравиться, но эйхо, это чертовски просто :)
Эта функция реализована в библиотеке "Microsoft Forms 2.0 Object Library". Чтобы создать ссылку на эту библиотеку, перейдите в редактор VBA, выберите "Инструменты", "Ссылки" и выберите ее из списка, если она еще не отмечена галочкой.
Вы можете сделать больше причудливых вещей с кучей вызовов WinAPI, но я обычно предпочитаю избегать их, если в этом нет крайней необходимости.
Кроме того, не забывайте о свойстве DisplayAlerts, которое подавляет диалоговые окна, хотя я не уверен, что оно всегда будет приводить к желаемому результату.
Спасибо за это, свойство DisplayAlerts отлично сработало для блокировки предупреждений из Excel. Я думаю, что для повторного импорта данных из Excel будет полезно очищать буфер обмена в конце каждого цикла
Просто для подтверждения; это свойство также доступно в Word. Я не проверял, как значения перечисления Word сравниваются со значениями Excel для этого свойства.
Буфер обмена Windows — это область временного хранения информации, которую вы скопировали или переместили из одного места и планируете использовать в другом месте. Вы не можете видеть или касаться буфера обмена, но вы можете работать с ним, чтобы копировать, вырезать, вставлять и очищать данные.
Существует около 30 типов данных, которые можно скопировать в буфер обмена, помимо текста и формул, таких как графика, диаграммы и гиперссылки. Чтобы по-настоящему очистить буфер обмена, требуется больше, чем просто нажатие клавиши Esc или выполнение кодовой строки VBA Application.CutCopyMode = False .
При использовании Windows API этот макрос VBA под названием ClearClipboard очищает все типы данных в вашем буфере обмена:
7 комментариев к «Tom’s Tutorials For Excel: *Really* Clear the Clipboard »
Том, когда я вставляю это в модуль или рабочую книгу, 3 верхних общедоступных объявления выделяются КРАСНЫМ цветом и не компилируются. Есть идеи, почему? Я никогда раньше не использовал публичное объявление, поэтому, очевидно, не понимаю, что делаю.
Первым вероятным подозреваемым, который я бы исключил, являются символы двойных кавычек. В некоторых браузерах они копируются в модули как символ двойной кавычки, отличный от символа на нашей клавиатуре. Так что сделайте это, внимательно посмотрите на код и методично, один за другим, осторожно удалите каждый символ двойной кавычки и на его месте введите символ двойной кавычки с клавиатуры. Когда вы уверены, что угадали каждый символ двойной кавычки, попробуйте код еще раз. Я знаю, что это работает, так что напишите в ответ, чем закончилась эта попытка исправления.
Я получаю сообщение об ошибке компиляции: код необходимо обновить для использования в 64-разрядных системах. Просмотрите и обновите операторы Declare, а затем пометьте их атрибутом PtrSafe.
Возможно, вам понадобится это в вашем модуле (чтобы заменить код с моей веб-страницы) для соответствия вашей 64-битной системе:
Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
Я пробую это в Windows 10 из Excel VBA.
Код компилируется и выдает какие-либо ошибки, но после этого, если я нажму Win+V, все содержимое останется в буфере обмена.
Вызов WriteLog(bdm, «Очистка буфера обмена Excel»)
Application.CutCopyMode = False
Вызовите WriteLog(bdm, «Очистка буфера обмена Windows»)
OpenClipboard (0&)
EmptyClipboard ‘ ОБЗОР. Кажется, это не очищает буфер обмена Windows.
Закрыть буфер обмена
Вызов WriteLog(bdm, «Очистка буфера завершена», True)
Ой. – Код, который я вставил, испортился и не читается. У меня есть три вызова API, и я могу выполнить отладчик VBA и заметить, что после EmptyClipboard Win+V все еще имеет список элементов.
Существует большая разница между очисткой буфера обмена, чтобы действительно сделать его пустым, и простым выполнением кодовой строки,
Application.CutCopyMode = False,
чтобы предположить (как некоторые ошибочно делают), что указанная кодовая строка очищает буфер обмена. буфер обмена, когда на самом деле это не так.
Эта кодовая строка просто делает то, что говорит, то есть, если вы находитесь в режиме CutCopyMode, например, выбрав ячейку и нажав «Правка» > «Копировать» или «Правка» > «Вырезать», выполнение этой кодовой строки приведет к выходу из этого режима.
Может быть один или несколько из более чем 30 форматов данных, поддерживаемых Windows и Excel, которые могут находиться в буфере обмена и не иметь ничего общего с CutCopyMode.
Приведенный ниже макрос оценивает, какие форматы находятся в буфере обмена.
Код выглядит длинным, но он предназначен для поиска каждого типа данных. Я мог пропустить 2 или 3, поэтому, если кто-то увидит, что я пропустил, напишите об этом, но общая идея такова:
Sub TestClipboard()
Dim vaFormats As Variant, dFormat As Variant
vaFormats = Application.ClipboardFormats
Для каждого dFormat в vaFormats
Выберите регистр dFormat
Case xlClipboardFormatBIFF
MsgBox "xlClipboardFormatBIFF (" & dFormat & ")"
Case xlClipboardFormatBIFF2
MsgBox " xlClipboardFormatBIFF2 ("&dFormat &")"
Case xlClipboardFormatBIFF3
MsgBox "xlClipboardFormatBIFF3 ("&dFormat &")"
Case xlClipboardFormatBIFF4
MsgBox "xlClipboardFormatBIFF4 ("&dFormat &") "
Case xlClipboardFormatBinary
MsgBox "xlClipboardFormatBinary (" & dFormat & ")"
Case xlClipboardFormatBitmap
MsgBox "xlClipboardFormatBitmap ("& dFormat & ")"
Case xlClipboardFormatCGM < br />MsgBox "xlClipboardFormatCGM ("&dFormat &")"
Case xlClipboardFormatCSV
MsgBox "xlClipboardFormatCSV ("&dFormat &")"
Case xlClipboardFormatDIF
MsgBox "xlClipboardFormatDIF (" & dFormat & ")"
Case xlClipboardFormatDspText
MsgBox "xlClipboardFormatDspText (" & dFormat & ")"
Case xlClipboardForma tEmbeddedObject
MsgBox "xlClipboardFormatEmbeddedObject ("&dFormat &")"
Case xlClipboardFormatEmbedSource
MsgBox "xlClipboardFormatEmbedSource ("&dFormat &")"
Case xlClipboardFormatLink
MsgBox "xlClipboardFormatLink ("&dFormat & ")"
Case xlClipboardFormatLinkSource
MsgBox "xlClipboardFormatLinkSource (" & dFormat & ")"
Case xlClipboardFormatLinkSourceDesc
MsgBox "xlClipboardFormatLinkSourceDesc (" & dFormat & ")"
Case xlClipboardFormatMovie
MsgBox "xlClipboardFormatMovie (" & dFormat & ")"
Case xlClipboardFormatNative
MsgBox "xlClipboardFormatNative (" & dFormat & ")"
Case xlClipboardFormatObjectDesc
/>MsgBox "xlClipboardFormatObjectDesc (" & dFormat & ")"
Case xlClipboardFormatObjectLink
MsgBox "xlClipboardFormatObjectLink (" & dFormat & ")"
Case xlClipboardFormatOwnerLink
MsgBox "xlClipboardFormatOwnerLink (" & dFormat & ")"
Case xlClipboardFormatPICT
Ms gBox "xlClipboardFormatPICT ("&dFormat &")"
Case xlClipboardFormatPrintPICT
MsgBox "xlClipboardFormatPrintPICT ("&dFormat &")"
Case xlClipboardFormatRTF
MsgBox "xlClipboardFormatRTF ("&dFormat & ")"
Case xlClipboardFormatScreenPICT
MsgBox "xlClipboardFormatScreenPICT ("&dFormat &")"
Case xlClipboardFormatStandardFont
MsgBox "xlClipboardFormatStandardFont ("&dFormat &")"
Case xlClipboardFormatStandardScale
MsgBox "xlClipboardFormatStandardScale ("&dFormat &")"
Case xlClipboardFormatSYLK
MsgBox "xlClipboardFormatSYLK ("&dFormat &")"
Case xlClipboardFormatTable
MsgBox "xlClipboardFormatTable (" & dFormat & ")"
Case xlClipboardFormatText
MsgBox "xlClipboardFormatText (" & dFormat & ")"
Case xlClipboardFormatToolFace
MsgBox "xlClipboardFormatToolFace (" & dFormat & ")"
Case xlClipboardFormatToolFacePICT
MsgBox "xlClipboardFormatToolFacePICT (" & dFormat & ")"
Case xlClipboardFormatVALU
MsgBox "xlClipboardFormatVALU (" & dFormat & ")"
Case xlClipboardFormatWK1
MsgBox "xlClipboardFormatWK1 (" & dFormat & ")"
Case dFormat = -1
MsgBox "В буфере обмена ничего нет"
Case Else
MsgBox "В буфере обмена есть данные формата номер ("&dFormat &")"
Конец Выберите
Далее
Конец подпункта
Тот факт, что
Application.CutCopyMode = False
не очищает буфер обмена, можно легко проверить, скопировав объект рисования, строку текста из строки формул или встроенное поле со списком… в любом случае, и выполните кодовую строку
Application.CutCopyMode = False,
но вы все равно сможете вставить этот объект или текст в другое место в Excel столько раз, сколько позволяет ваша системная память, если вы не перезагрузите компьютер.
Обратите также внимание, что динамическое включение функции «Вставить» в меню «Правка» или контекстном меню не является надежным способом предположить, что буфер обмена очищен. Это означает только то, что данные, которые можно вставить на лист Excel, могут быть в буфере обмена, а могут и не быть.
Зарегистрированный пользователь Дата регистрации 20.12.2016 Местоположение Австралия MS-Off Ver 2010 Сообщений 16
Код VBA Excel для очистки всего в буфере обмена
Я пытаюсь написать макрос, чтобы "очистить все" в буфере обмена Excel.
Эффект должен быть эквивалентен переходу в буфер обмена и нажатию «Очистить все» (см. снимок экрана ниже)
Смысл этого в том, чтобы очистить все данные буфера обмена в конце очень длинного макроса, который я разработал, который не будет выдавать сообщение "изображение слишком велико, и его нужно будет обрезать" после закрытия книги.
Я потратил часы, пытаясь найти решение, но ничего не увенчалось успехом.
Ниже приведено распространенное решение, когда вы вставляете этот код после «вставки значения." Я пробовал это, но данные по-прежнему помещаются в буфер обмена.
Application.CutCopyMode = False
Есть ли способ просто закодировать команду "Очистить все", как показано на скриншоте?
Кажется простым, но трудно найти ответ.
Гуру форума Дата регистрации 14.12.2012 Местоположение Лондон Англия MS-Off Ver MS 365 Office Suite. Сообщений 8450
Мои общие правила, если вам нужна моя помощь. Не направлено ни на кого конкретно:
<р>1. Пожалуйста, делайте запросы, а не требования, никому из нас здесь не платят. <р>2. Регулярно проверяйте свой пост. Я не вернусь к посту через 4 дня.Если это не важно для вас, то это точно не важно для меня.
Зарегистрированный пользователь Дата регистрации 20.12.2016 Местоположение Австралия MS-Off Ver 2010 Сообщений 16
Я только что понял, что буфер обмена не является частью Excel, это буфер обмена окна, поэтому я не могу закодировать его в Excel.
Ниже приведено относительное кодирование. Даже с Application.CutCopyMode = False кажется, что скопированные данные помещаются в буфер обмена.
Листы("Свод").ИспользованныйДиапазон.Выбрать
Выделение.Копировать
Листы("Окончательный").Выбрать
Диапазон("A1").Выбрать
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Forum Expert Дата регистрации 23.12.2012 Местоположение Северная Каролина MS-Off Ver Excel 2019 Professional Plus — 2007 Enterprise Сообщений 6 463
Видел это в другом посте, и я протестировал его с помощью Word VBA.
'Очистка буфера обмена Office
Затемнить объект oData As New DataObject для использования буфера обмена
oData.SetText text:=Empty 'Очистить
oData.PutInClipboard 'возьмите буфер обмена, чтобы очистить его
Просто скопируйте и вставьте в свой код, когда вам нужно очистить буфер обмена.
Еще одна вещь, которую я заметил, это то, что когда я выхожу из программы, скажем, из Excel, она продолжает спрашивать меня, хочу ли я сохранить данные в буфере обмена. Обходной путь заключается в очистке буфера обмена с помощью указанного выше кода. См. ниже:
'Очистка буфера обмена Office
Затемнить объект oData As New DataObject для использования буфера обмена
oData.SetText text:=Empty 'Очистить
oData.PutInClipboard' взять буфер обмена, чтобы очистить его
'Вы также можете просто удалить предупреждающие сообщения из программы Excel во время
'исполнения кода
'Удалить предупреждающие сообщения из программы Excel при закрытии
ExcelProgram. DisplayAlerts = Ложь
'Выход из приложения Excel
ExcelProgram.Quit
Я использовал приведенный выше пример в коде VBA для импорта данных из файла Excel. Смотрите здесь
Эта функциональность реализована в библиотеке "Microsoft Forms 2.0 Object Library". Чтобы создать ссылку на эту библиотеку, перейдите в редактор VBA, выберите "Инструменты", "Ссылки" и выберите ее из списка, если она еще не отмечена галочкой.
Вы можете сделать больше причудливых вещей с кучей вызовов WinAPI, но я обычно предпочитаю избегать их, если в этом нет крайней необходимости.
Кроме того, не забывайте о свойстве DisplayAlerts, которое подавляет диалоговые окна, хотя я не уверен, что оно всегда будет приводить к желаемому результату.
Читайте также: