Application.CutCopyMode = False (Cómo usarlo)
Si usa copiar y pegar mientras graba una macro, veremos el código que hace referencia a Application.CutCopyMode = False . Quizás se pregunte por qué está ahí. ¿Qué hace?
En esta publicación, respondemos todas sus preguntas sobre Application.CutCopyMode.
Tabla de contenido
- Application.CutCopyMode = False en macros grabadas
- ¿Para qué sirve Application.CutCopyMode = False?
- ¿Application.CutCopyMode borrará el portapapeles?
- ¿Qué pasa con CutCopyMode = Verdadero?
- ¿Deberías usar CutCopyMode = False?
- Valores de configuración
- Copiar con destino
- Conclusión
Application.CutCopyMode = False en macros grabadas
Si grabamos una macro VBA donde copiamos y pegamos el código grabado podría verse similar al siguiente:
Range("A1:A10").SelectSelection.CopyRange("D1").SelectActiveSheet.PasteApplication.CutCopyMode = False
Si ejecutamos el código VBA para copiar y pegar sin esa línea de código, todavía funciona bien. Entonces, ¿sirve para algún propósito?
¿Para qué sirve Application.CutCopyMode = False?
En Excel, cuando copiamos o cortamos un rango de celdas, el contenido se almacena temporalmente en el portapapeles de Excel. Aquí es cuando aparece la línea de puntos animada y se mueve por el exterior del rango; comúnmente conocidas como hormigas marchantes .
Mire la captura de pantalla a continuación; las hormigas en marcha muestran que estamos en modo cortar o copiar, con las celdas A1 a C4 almacenadas en el portapapeles. El mensaje en la barra de estado también cambia para indicar en qué modo estamos.
Habiendo copiado un rango de celdas, ahora podemos:
- Pegue el contenido copiado del portapapeles, o
- Realice cualquier otra acción para salir del modo cortar/copiar.
- Presione la tecla Esc para salir de CutCopyMode sin necesidad de realizar ninguna acción en la hoja de trabajo.
Application.CutCopyMode = False es la acción de VBA de salir del modo cortar/copiar.
- Las hormigas marchantes eliminadas.
- La barra de estado vuelve a su estado predeterminado
- Se borra la memoria utilizada para el contenido copiado en el portapapeles.
Después de usar Application.CutCopyMode = False, ya no es posible pegar desde el portapapeles usando VBA. Intentar hacerlo genera un error.
Error de tiempo de ejecución '1004′: falló el método de pegado de la clase Hoja de trabajo
Si estamos en modo cortar/copiar y se han seleccionado más de 101 celdas, al cerrar el libro aparece el siguiente mensaje de advertencia.
Hay una gran cantidad de información en el Portapapeles. ¿Quieres poder pegar esta información en otro programa más adelante?
Por lo tanto, restablecer CutCopyMode antes de cerrar un libro evita que aparezca este mensaje de advertencia.
¿Application.CutCopyMode borrará el portapapeles?
En la sección anterior, se observó que Application.CutCopyMode = False borra el portapapeles. Sin embargo, esto se relaciona con el portapapeles de Excel y no con el portapapeles de Windows.
El portapapeles de Windows aún conserva los elementos que tenía anteriormente y no se ve afectado por esta configuración.
¿Qué pasa con CutCopyMode = Verdadero?
Lógicamente, pensaríamos que Application.CutCopyMode = True activaría a las hormigas en marcha, pero no es así. La propia documentación de Microsoft indica que debería hacerlo, pero nunca he hecho que esto funcione ni he visto a otros usarlo.
Lo opuesto a Application.CutCopyMode = False no es Application.CutCopyMode = True. Cuando cortamos o copiamos celdas, el estado de CutCopyMode es xlCopy o xlCut . Cada estado también tiene un valor numérico:
- Falso = 0
- xlCopia = 1
- xlCorte = 2
Al pegar celdas, Excel lee el estado de CutCopyMode para saber si debe cortar o copiar.
El siguiente VBA determinará en qué modo se encuentra Excel:
Select Case Application.CutCopyMode Case False MsgBox "CutCopyMode = False" Case xlCopy MsgBox "CutCopyMode = xlCopy" Case xlCut MsgBox "CutCopyMode = xlcut"End Select
¿Deberías usar CutCopyMode = False?
Si escribimos código VBA desde cero, rara vez es necesario utilizar CutCopyMode. No porque sea un código incorrecto, sino porque hay mejores formas de copiar y pegar que no utilizan el portapapeles de Excel, lo que hace que su ejecución sea más rápida.
Valores de configuración
Podemos pegar valores usando la propiedad Valor del objeto de rango. El siguiente código coloca los valores de las celdas B1 a B20 en las celdas A1 a A20 sin usar el portapapeles de Excel.
Sub CopyAndPasteValuesOnly()ActiveSheet.Range("A1:A20").Value =ActiveSheet.Range("B1:B20").ValueEnd Sub
Copiar con destino
Si deseamos copiar y pegar algo más que valores, podemos usar el argumento de destino del método de copia. Esto también evita la necesidad de copiar y pegar.
Sub CopyAndPasteValuesOnly()ActiveSheet.Range("A1:A20").Copy Destination:=ActiveSheet.Range("B1:B20")End Sub
No es necesario definir la gama completa del destino; podemos simplemente hacer referencia a la primera celda. Excel sabe cuántas celdas hemos copiado y ajustará el rango de pegado en consecuencia.
ActiveSheet.Range("A1:A20").Copy ActiveSheet.Range("B1")
Conclusión
En última instancia, la decisión de usar Application.CutCopyMode = False en nuestro código VBA se reduce a esto: si al final de ejecutar la macro, las hormigas en marcha son visibles y no quieres que lo sean, entonces úsala. , de lo contrario no te preocupes por eso.
Artículos Relacionados:
- Propiedades y métodos de VBA de celda y rango
- Códigos VBA útiles para Excel (30 macros de ejemplo + libro electrónico gratuito)
- Biblioteca de códigos VBA
Deja una respuesta