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?
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
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"
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