RE:Elementos anteriores del Portapapeles
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