Получить текст из буфера обмена с помощью GetText - избежать ошибки в пустом буфере обмена

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

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

Я использую обработку ошибок, чтобы получить прошлое в том случае, когда буфер обмена пуст, и все в порядке, пока я держу Error Trapping установленным в Break on Unhandled Errors.

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

Ответ 1

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

Sub GetClipBoardText()
   Dim DataObj As MSForms.DataObject
   Set DataObj = New MsForms.DataObject '<~~ Amended as per jp 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

EDIT: новый запрос 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

Ответ 2

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

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

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

Получил это для работы с этим (http://excel-macro.tutorialhorizon.com/vba-excel-reference-libraries-in-excel-workbook/):

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

Ответ 3

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

myString = DataObj.GetText(1)  MsgBox myString