VBA Copiar al Portapapeles
Este artículo demostrará cómo utilizar VBA para copiar elementos en el Portapapeles.
Es posible que desee copiar información en Excel VBA y almacenarla para utilizarla dentro de otra aplicación o en otro momento cuando la macro de Excel haya dejado de ejecutarse. Una vez que una macro deja de ejecutarse, la información que se almacena en una o varias variables deja de existir y ya no puede recuperarse. Una forma de resolver este problema sería copiar esta información al portapapeles.
Copiar al Portapapeles Utilizando la Biblioteca de Objetos HTML
La forma más sencilla de utilizar el portapapeles en Excel VBA es llamar a la Biblioteca de Objetos HTML.
Sub AlmacenarDatos()
Dim varText As Variant
Dim objCP As Object
varText = "Algún texto copiado"
Set objCP = CreateObject("HtmlFile")
objCP.ParentWindow.ClipboardData.SetData "text", varText
End Sub
Esto utiliza la vinculación tardía declarando la variable objCP como un objeto, por lo que no es necesario añadir una referencia primero.
Si abre una hoja de cálculo de Excel y hace clic en Pegar, el texto «Algún texto copiado» se insertará en la celda seleccionada.
Si cambias el subprocedimiento anterior por una función, puedes pasar el texto a una variable.
Function AlmacenarDatos(varText As Variant) as String
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
objCP.ParentWindow.ClipboardData.SetData "text", varText
End Function
Entonces es posible llamar a esta función varias veces.
Sub CopiarDatos()
AlmacenarDatos "Algún texto copiado"
End Sub
También puede utilizar el objeto HTML para devolver el texto del portapapeles – es decir, pegar. Para ello, utilice el método GetData en lugar del método SetData.
Function ReturnData()
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
ReturnData = objCP.parentWindow.clipboardData.GetData("text")
End Function
Entonces puede llamar a esta función para devolver los datos almacenados en el portapapeles.
Sub PegarDatos()
MsgBox ReturnData
End Sub
Un buen truco es combinar las 2 funciones para que pueda utilizar la misma función para copiar y pegar datos, dependiendo de si los datos se envían al portapapeles o si desea recuperar los datos del portapapeles.
Function StoreOrReturnData(Optional strText As String) As String
Dim varText As Variant
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
varText = strText
If strText <> "" Then
objCP.ParentWindow.ClipboardData.SetData "text", varText
Else
StoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData("text")
End If
End Function
En el código anterior, la variable strText es opcional – esto significa que no necesita introducir el valor de la variable si sólo desea pegar datos.
A continuación, asigne la variable de cadena (strText) a una variable Variant para que se almacene en el método SetData del objeto de archivo HTML.
Para copiar los datos, puede utilizar este procedimiento:
Sub CopiarDatos()
StoreOrReturnData "AlgúnTextoCopiado"
End Sub
Este procedimiento muestra un cuadro de mensaje con el valor del portapapeles.
Sub PegarDatos()
MsgBox StoreOrReturnData
End Sub