Получить текст из буфера обмена с помощью GetText-избежать ошибки в пустом буфере обмена
Я использую такой код, чтобы получить текст из буфера обмена.
Dim DataObj As New MSForms.DataObject
DataObj.GetFromClipboard
myString = DataObj.GetText
Я использую обработку ошибок, чтобы получить прошлый случай, когда буфер обмена пуст, и все в порядке, пока я сохраняю ловушку ошибок, настроенную на разрыв необработанных ошибок.
Однако по несвязанным причинам я хочу установить ловушку ошибок, чтобы сломать все ошибки, и это вызывает ошибку в DataObj.GetText
, когда он находит пустой буфер обмена. Есть ли какой-либо тест, который я могу применить дальше вверх по течению, чтобы избежать попыток обработать пустой буфер обмена?
3 ответа:
Помогает ли это?
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
EDIT: New Request by 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
Надеюсь, это поможет кому-то еще:
Я получал ошибку "пользовательский тип не определен" в коде, опубликованном Сиддхарт-раут
Оказалось, что библиотека "Microsoft Forms 2.0 Object Library" отсутствует / не активирована.
Получил его, чтобы работать с этим (http://excel-macro.tutorialhorizon.com/vba-excel-reference-libraries-in-excel-workbook/):
" иногда вы не найдете нужные ссылки в списке, скажем, вы не найдете "Microsoft Forms 2.0 Object Библиотека " в списке инструментов / ссылок в этом случае вам нужно просмотреть FM20.DLL файл из system32 "