it-swarm.com.de

Mit GetText Text aus der Zwischenablage abrufen - Fehler in der leeren Zwischenablage vermeiden

Ich verwende Code wie diesen, um Text aus der Zwischenablage zu holen.

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

Ich verwende die Fehlerbehandlung, um die Vergangenheit nach dem Fall zu ermitteln, in dem die Zwischenablage leer ist und alles in Ordnung ist, solange ich Error Trapping bei unbehandelten Fehlern auf Break gesetzt halte.

Aus nicht zusammenhängenden Gründen möchte ich jedoch festlegen, dass Error Trapping bei allen Fehlern aufgehoben wird. Dies führt zu einem Fehler bei DataObj.GetText, wenn die leere Zwischenablage gefunden wird. Gibt es einen Test, den ich weiter vorwärts anwenden kann, um zu vermeiden, dass eine leere Zwischenablage verarbeitet wird?

13
Roy

Hilft das?

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

Sie werden feststellen, dass auch eine leere Zwischenablage verarbeitet wird.

Sie können die Zwischenablage leeren, bevor Sie den obigen Code mit dem folgenden Code testen. Bitte fügen Sie es in ein Modul ein.

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

BEARBEITEN: Neue Anfrage durch 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
17
Siddharth Rout

Hoffe das hilft jemand anderem:

Ich habe die Fehlermeldung "Benutzerdefinierter Typ nicht definiert" in dem von Siddharth-rout veröffentlichten Code erhalten

Es stellte sich heraus, dass die Bibliothek "Microsoft Forms 2.0 Object Library" nicht vorhanden oder nicht aktiviert war.

Damit es funktioniert ( http://Excel-macro.tutorialhorizon.com/vba-Excel-reference-libraries-in-Excel-workbook/ ):

"Manchmal finden Sie die gewünschten Verweise nicht in der Liste, sagen Sie, dass Sie die" Microsoft Forms 2.0 Object Library "nicht in der Tool-/Referenzliste finden. In diesem Fall müssen Sie die Datei FM20.DLL von system32 aus durchsuchen.

5
Leon Wurr

fügen Sie den folgenden Code hinzu, nur b4 die Bruchlinie für das Debuggen .... Der Fehler ist für mich nach diesem Test verschwunden ... komisch, aber es funktioniert irgendwie

myString = DataObj.GetText(1)
MsgBox myString
0
agadir