Obtenga texto del portapapeles usando GetText – evite errores en el portapapeles vacío

Estoy usando un código como este para sacar texto del Portapapeles.

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

Uso el manejo de errores para pasar el caso donde el Portapapeles está vacío, y todo está bien, siempre y cuando mantengo el Trampa de Errores configurado para Romper los Errores no Administrados.

Sin embargo, por razones no relacionadas, quiero configurar Error Trapping para romper en todos los errores, y esto arroja un error en DataObj.GetText cuando encuentra el Portapapeles vacío. ¿Hay algún tipo de prueba que pueda aplicar más arriba para evitar tratar de procesar un Portapapeles vacío?

¿Esto ayuda?

 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 

Notarás que también manejará un portapapeles vacío.

Puede vaciar el portapapeles antes de probar el código anterior utilizando el siguiente código. Por favor pégalo en un módulo.

 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 

EDITAR: Nueva solicitud por 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 

Espero que esto ayude a alguien más:

Recibí el error “Tipo definido por el usuario no definido” en el código publicado por siddharth-rout

Resulta que faltaba / no estaba activada la biblioteca “Biblioteca de objetos de Microsoft Forms 2.0”.

Tengo que trabajar con esto ( http://excel-macro.tutorialhorizon.com/vba-excel-reference-libraries-in-excel-workbook/ ):

“A veces no encontrará las referencias deseadas en la lista, por ejemplo, no encontrará” Biblioteca de objetos de Microsoft Forms 2.0 “en la lista de herramientas / referencia; en ese caso, debe buscar el archivo FM20.DLL desde el sistema32”

agregue el código siguiente follwoing b4 la línea de corte para la depuración …. el error desapareció para mí después de esa prueba … extraño pero de alguna manera funciona (Excel 2010)

 myString = DataObj.GetText(1) MsgBox myString 
Intereting Posts