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 |