web-dev-qa-db-fra.com

Obtenir du texte du presse-papiers à l'aide de GetText - éviter les erreurs dans le presse-papiers vide

J'utilise un code comme celui-ci pour extraire du texte du Presse-papiers.

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

J'utilise la gestion des erreurs pour obtenir le passé dans le cas où le Presse-papiers est vide et tout va bien tant que je garde le traçage d'erreurs défini sur Interrompre les erreurs non gérées.

Cependant, pour des raisons différentes, je souhaite définir le recouvrement des erreurs sur Interrompre toutes les erreurs, ce qui génère une erreur sur DataObj.GetText lorsqu’il trouve le Presse-papiers vide. Existe-t-il un type de test que je peux appliquer plus en amont pour éviter de traiter un Presse-papiers vide?

13
Roy

Est-ce que cela aide?

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

Vous remarquerez qu'il gèrera également un presse-papiers vide.

Vous pouvez vider le presse-papiers avant de tester le code ci-dessus en utilisant le code ci-dessous. Veuillez le coller dans un module.

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: Nouvelle demande de 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

J'espère que ceci aide quelqu'un d'autre:

Je recevais l'erreur "Type défini par l'utilisateur non défini" sur le code envoyé par Siddharth-rout

Il s'avère que la bibliothèque «Microsoft Forms 2.0 Object Library» était manquante/non activée.

Je dois le faire fonctionner avec ceci ( http://Excel-macro.tutorialhorizon.com/vba-Excel-reference-libraries-in-Excel-workbook/ ):

"Parfois, vous ne trouvez pas les références souhaitées dans la liste, vous ne trouvez pas" Bibliothèque d'objets Microsoft Forms 2.0 "dans la liste des outils/références, dans ce cas, vous devez parcourir le fichier FM20.DLL depuis le système32"

5
Leon Wurr

ajoutez le code suivant juste b4 la ligne de rupture pour le débogage .... l'erreur a disparu pour moi après ce test .. bizarre mais ça fonctionne (Excel 2010)

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