VBA Copiar al Portapapeles

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on agosto 16, 2022

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
vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples