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

Это расширение вопроса, который я задал здесь:

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

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

Итак, как я могу прервать процедуру, если в буфере обмена только изображение и текст отсутствует?

Ответы [ 2 ]

0 голосов
/ 25 марта 2012

Ну, это заняло некоторое время, но вот как это сделать.

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

 Sub TEST_getClipText()
    Debug.Print getClipText
 End Sub
 Function getClipText() As String
    Dim DataObj As MsForms.DataObject
    Set DataObj = New MsForms.DataObject 'tnx jp
    Dim V As Variant
    For Each V In Application.ClipboardFormats
       If V = xlClipboardFormatText Then
          DataObj.GetFromClipboard
          getClipText = DataObj.getText(1)
          Exit Function
       End If
    Next V
    MsgBox "No text on clipboard"
 End Function
0 голосов
/ 02 февраля 2012

Используя этот код, вы можете проверить, является ли формат данных в буфере обмена изображением или нет.

Option Explicit

Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long

Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Integer) As Long

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

Const CF_BITMAP = 2

Sub Sample()
    Dim RetClpB As Long
    Dim RetBmp As Long

    '~~> Open Clipboard
    RetClpB = OpenClipboard(0&)

    '~~> Check if we were successful
    If RetClpB <> 0 Then
        '~~> Test if the data in Clipboard is an image by
        '~~> trying to get a handle to the Bitmap
        RetBmp = GetClipboardData(CF_BITMAP)

        '~~> If found
        If RetBmp <> 0 Then
            MsgBox "data in clipboad is an image"
        Else
            MsgBox "data in clipboad is not an image"
        End If
    End If

    '~~> Close Clipboard
    RetClpB = CloseClipboard
End Sub
...