Получить текст из буфера обмена с помощью GetText - избежать ошибки в пустом буфере обмена - PullRequest
14 голосов
/ 26 января 2012

Я использую такой код для получения текста из буфера обмена.

Dim DataObj As New MSForms.DataObject
DataObj.GetFromClipboard
myString = DataObj.GetText

Я использую обработку ошибок, чтобы забыть о случае, когда буфер обмена пуст, и все в порядке, покаЯ сохраняю функцию «Перехват ошибок» на «Разрыв необработанных ошибок».

Однако по несвязанным причинам я хочу установить «Перехват ошибок» на «Разрыв всех ошибок», и это приводит к ошибке на DataObj.GetText, когда он находит пустой буфер обмена.Есть ли какой-нибудь тест, который я могу применить дальше, чтобы избежать попытки обработать пустой буфер обмена?

Ответы [ 3 ]

19 голосов
/ 26 января 2012

Помогает ли это?

Sub GetClipBoardText()
   Dim DataObj As MSForms.DataObject
   Set DataObj = New MsForms.DataObject '<~~ Amended as per jp's suggestion

   On Error GoTo Whoa

   '~~> Get data from the clipboard.
   DataObj.GetFromClipboard

   '~~> Get clipboard contents
   myString = DataObj.GetText(1)
   MsgBox myString

   Exit Sub
Whoa:
   If Err <> 0 Then MsgBox "Data on clipboard is not text or is empty"
End Sub

Вы заметите, что он также будет обрабатывать пустой буфер обмена.

Вы можете очистить буфер обмена перед тестированием вышеуказанного кода, используя код ниже. Пожалуйста, вставьте его в модуль.

Private Declare Function OpenClipboard Lib "User32.dll" _
(ByVal hWndNewOwner As Long) As Long

Private Declare Function EmptyClipboard Lib "User32.dll" () As Long

Private Declare Function CloseClipboard Lib "User32.dll" () As Long

Public Sub ClearClipboard()
    Dim Ret

    Ret = OpenClipboard(0&)
    If Ret <> 0 Then Ret = EmptyClipboard
    CloseClipboard
End Sub

РЕДАКТИРОВАТЬ: новый запрос по OP

Private Declare Function CountClipboardFormats Lib "user32" () As Long

Sub Sample()
    If (CountClipboardFormats() = 0) = True Then
        MsgBox "Clipboard is empty"
    Else
        MsgBox "Clipboard is not empty"
    End If
End Sub
5 голосов
/ 18 апреля 2017

Надеюсь, это поможет кому-то еще:

Я получаю сообщение об ошибке "Определяемый пользователем тип не определен" в коде, опубликованном Сиддхарт-раут

Оказывается, библиотека «Библиотека объектов Microsoft Forms 2.0» отсутствует / не активирована.

Работаем с этим (http://excel -macro.tutorialhorizon.com / vba-excel-reference-library-in-excel-workbook / ):

"Иногда вы не можете найти нужные ссылки в списке, скажем, вы не найдете« Библиотеку объектов Microsoft Forms 2.0 »в списке инструментов / ссылок, в этом случае вам нужно просмотреть файл FM20.DLL из system32"

0 голосов
/ 01 февраля 2017

добавить следующий код, просто b4, разрыв строки для отладки .... ошибка исчезла для меня после этого теста .. странно, но это как-то работает (Excel 2010)

myString = DataObj.GetText(1)
MsgBox myString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...