Excel - Elementos anteriores del Portapapeles

 
Vista:

Elementos anteriores del Portapapeles

Publicado por Juan  (35 intervenciones) el 22/01/2009 17:12:22
Hola todos,
Abro el Portapapeles, leo los datos (ultimo copiado) y lo cierro.
Mi problema es que quiero leer los elementos anteriores y no se localizar el puntero de los mismos.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Elementos anteriores del Portapapeles

Publicado por juan (35 intervenciones) el 23/01/2009 18:08:59
Option Explicit

' Declaraciones
Dim Handle As Long
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function GetForegroundWindow Lib "user32" () As Long
' Esta constante indica que recuperaremos texto
Private Const CF_TEXT = 1
'Función para recuperar los datos
Private Declare Function GetClipboardData Lib "user32" ( _
ByVal wFormat As Long) As Long

' función Api para cerrar el portapapeles
Private Declare Function CloseClipboard Lib "user32" () As Long

' función Api para abrir el portapapeles
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" ( _
ByVal lpString As Long) As Long

'api CopyMemory
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
pDst As Any, _
pSrc As Long, _
ByVal ByteLen As Long)




Private Sub Command1_Click()
MsgBox GetClipBoard, vbInformation
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function GetClipBoard() As String

Dim hStrPtr As Long
Dim lLength As Long
Dim sBuffer As String

'Abrimos el Clipboard pasandole el hwnd de nuestro form
Call OpenClipboard(Me.hwnd)

'Puntero a los datos del clipboard
hStrPtr = GetClipboardData(CF_TEXT)
'Si da 0 dá error
If hStrPtr <> 0 Then
'Averiguamos la longitud de la cadena con la API lstrLen _
pasándole como parametro el puntero a los datos del clipboard
lLength = lstrlen(hStrPtr)
'Si es mayor a 0 quiere decir que hay texto
If lLength > 0 Then
'Creamos un buffer que almacenara los datos devueltos
sBuffer = Space$(lLength)
'llenamos el buffer con los datos especificando el _
puntero de memoria en el segundo parametro
Call CopyMemory(ByVal sBuffer, ByVal hStrPtr, lLength)

'Retorna
GetClipBoard = sBuffer
Range("a1") = sBuffer 'En la Celda A1 tengo el último elemento
copiado en el Portapapeles. Mi pregunta
es:
¿ Como puedo recuperar los 11 elementos
restantes del Portapapeles?

End If
End If
'Cerramos el clipboard
Call CloseClipboard
End Function

Private Sub Form_Load()
MsgBox "Copia un texto al portapapeles " & _
"y luego presiona el CommandButton", 32

CommandButton1.Caption = "Obtener texto"

End Sub

Function hwnd() As Long
hwnd = Handle
End Function

Private Sub CommandButton1_Click()
Stop
Form_Load

Handle = GetForegroundWindow() 'Devuelve el manejador de la ventana activa
GetClipBoard
End Sub

Private Sub UserForm_Click()

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Elementos anteriores del Portapapeles

Publicado por Abraham Valencia (2415 intervenciones) el 23/01/2009 18:38:53
un par de veces he leido que no se puede recuperar mediante VBA, los elementos del portapapeles, que solo se puede con el ultimo copiado :(

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos anteriores del Portapapeles

Publicado por juan (35 intervenciones) el 23/01/2009 21:02:25
Enterado.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos anteriores del Portapapeles

Publicado por juan (35 intervenciones) el 24/01/2009 01:53:22
He hecho algunas pruebas y he llegado a la conclusión de que accede al Portapapeles del Windows que solo tiene un elemento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar