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
Índice
  1. Application.CutCopyMode = False en macros grabadas
  2. ¿Para qué sirve Application.CutCopyMode = False?
    1. ¿Application.CutCopyMode borrará el portapapeles?
  3. ¿Qué pasa con CutCopyMode = Verdadero?
  4. ¿Deberías usar CutCopyMode = False?
    1. Valores de configuración
    2. Copiar con destino
  5. 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.

Hormigas marchando en CutCopyMode

Habiendo copiado un rango de celdas, ahora podemos:

  1. Pegue el contenido copiado del portapapeles, o
  2. Realice cualquier otra acción para salir del modo cortar/copiar.
  3. 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

Error de tiempo de ejecución 1004: error al pegar: mensaje de error de VBA

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?

Gran cantidad de información en el portapapeles.

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

Este sitio utiliza cookies para una mejor experiencia - Mas información