es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No está disponible el método de edición y pegado.

Estoy intentando un código simple que corta una tarea de una parte de mi archivo de proyecto y la pega en otra parte – código abajo.

Cuando ejecuto el código, va a la depuración: error de tiempo de ejecución 1100: El método no está disponible en esta situación. y resalta EditPaste. Cuando voy a depurar y lo ejecuto (sin cambios), ¡funciona bien! Por favor ayuda, ¿cómo puedo evitar que aparezca el error de tiempo de ejecución?

Sub Mover()

Dim i Como Integer

i = ActiveCell.Task.id

' Quiero seleccionar manualmente la tarea que quiero mover:
SeleccionaFila Fila:=0, filaRelativa:=True
EditCut

' Quiero pegarlo en la fila 2 de mi agenda

SeleccionaFila Fila:=2, filaRelativa:=False

' Aquí se detiene el depurador, pero en modo de depuración, ¡funcionará si lo vuelvo a ejecutar!
EditPaste

' Esta línea vuelve a donde estaba en la agenda
Application.Find Field:="ID", test:="equals", value:=i + 1

End Sub
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Posible solución

    El problema con el método EditPaste que no está disponible en ciertas situaciones puede estar relacionado con el momento en que se llama. Una forma de evitar este error en tiempo de ejecución es agregar una breve pausa antes de llamar al método EditPaste para asegurarse de que el portapapeles tenga suficiente tiempo para actualizarse después de que se haya ejecutado el método EditCut.

    Sub Mover()
    
        Dim i As Integer
    
        i = ActiveCell.Task.id
    
        ' Quiero seleccionar manualmente la tarea que quiero mover:
        SelectRow Row:=0, rowrelative:=True
        EditCut
    
        ' Quiero pegarlo en la fila 2 de mi programación
        SelectRow Row:=2, rowrelative:=False
    
        ' Espera 0.5 segundos antes de pegar para permitir la actualización del portapapeles
        Application.Wait (Now + TimeValue("0:00:01"))
        EditPaste
    
        ' Esta línea vuelve a donde estaba en la programación
        Application.Find Field:="ID", Test:="equals", Value:=i + 1
    
    End Sub
    

    Tenga en cuenta que el método Application.Wait pausa la macro durante un intervalo de tiempo especificado (en este caso, medio segundo) antes de ejecutar la siguiente línea de código. Esto debería dar suficiente tiempo para que el método EditCut se complete y para que se actualice el portapapeles, lo que permite que el método EditPaste se ejecute sin errores.

    Otra forma de evitar este problema es utilizar un método alternativo que implica copiar y pegar la tarea en lugar de cortar y pegarla. Esto se puede hacer utilizando el método EditCopy en lugar del método EditCut.

    Sub Mover()
    
        Dim i As Integer
    
        i = ActiveCell.Task.id
    
        ' Quiero seleccionar manualmente la tarea que quiero mover:
        SelectRow Row:=0, rowrelative:=True
        EditCopy
    
        ' Quiero pegarlo en la fila 2 de mi programación
        SelectRow Row:=2, rowrelative:=False
    
        ' Pegar la tarea copiada
        EditPaste
    
        ' Esta línea vuelve a donde estaba en la programación
        Application.Find Field:="ID", Test:="equals", Value:=i + 1
    
    End Sub
    

    Utilizando este enfoque, la tarea se copia primero al portapapeles utilizando el método EditCopy, y luego se pega en la ubicación deseada utilizando el método EditPaste. Esto debería funcionar sin errores de tiempo de ejecución ni la necesidad de una pausa entre los dos métodos.

Comments are closed.