Copia de VBA al portapapeles

Este artículo demostrará cómo usar VBA para copiar elementos al Portapapeles.

Puede haber un momento en el que deseemos copiar información en Excel VBA y almacenarla para usarla 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 variable o variables deja de existir y ya no se puede recuperar. Una forma de solucionar este problema sería copiar esta información al portapapeles.

Copiar al portapapeles usando la biblioteca de objetos HTML

La forma más sencilla de usar el portapapeles en Excel VBA es llamar a la biblioteca de objetos HTML.

1234567 Sub StoreData ()Dim varText como varianteDim objCP como objetovarText = "Algún texto copiado"Establecer objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "texto", varTextEnd Sub

Como usamos el enlace tardío al declarar la variable objCP como un Objeto, no necesitamos agregar una referencia a Excel para que este procedimiento funcione.

Si ahora cambiamos a nuestra hoja de cálculo de Excel y hacemos clic en Pegar, el texto "Algunos datos copiados" se insertaría en la celda seleccionada.

Si tuviéramos que cambiar este procedimiento anterior en una función, podríamos pasar el texto a copiar como una variable.

12345 Función StoreData (varText como variante) como cadenaDim objCP como objetoEstablecer objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "texto", varTextFunción final

Luego podríamos llamar a esta función varias veces en nuestro código VBA cuando necesitemos copiar texto al portapapeles. Por lo tanto, el texto no estaría codificado en el código VBA.

123 Sub CopyData ()StoreData "Algún texto copiado"End Sub

También podemos usar el objeto HTML para devolver el texto del portapapeles, es decir, pegar. Para esto usamos el método GetData en lugar del método SetData.

12345 Función ReturnData ()Dim objCP como objetoEstablecer objCP = CreateObject ("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData ("texto")Función final

Luego podemos llamar a esta función para devolver los datos almacenados en el portapapeles.

123 Sub PasteData ()MsgBox ReturnDataEnd Sub

Un buen truco sería combinar las 2 funciones juntas para que podamos usar la misma función para Copiar y Pegar datos, dependiendo de si enviamos o no datos al portapapeles, o si deseamos recuperar datos del portapapeles.

1234567891011 Función StoreOrReturnData (strText opcional como cadena) Como cadenaDim varText como varianteDim objCP como objetoEstablecer objCP = CreateObject ("HtmlFile")varText = strTextSi strText "" EntoncesobjCP.ParentWindow.ClipboardData.SetData "texto", varTextDemásStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData ("texto")Terminara siFunción final

En el código anterior, podemos hacer que la variable strText sea opcional; esto significa que si deseamos Copiar datos, incluiremos el texto a copiar, pero si deseamos Pegar datos, lo excluiremos.

Luego asignaremos 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, podemos utilizar este procedimiento, tenga en cuenta que estamos incluyendo el texto a copiar.

123 Sub CopyData ()StoreOrReturnData "SomeCopiedText"End Sub

Para pegar los datos, podemos utilizar este procedimiento. El cuadro de mensaje mostrará el valor almacenado en el portapapeles.

123 Sub PasteData ()MsgBox StoreOrReturnDataEnd Sub

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave