Código para corregir macro usando PasteSpecial

Estimad@s, tengo una planilla con varias hojas y cada una tiene un formato establecido, entonces el usuario sólo puede trabajar en las celdas que no están protegidas, y también puede copiar el contenido de alguna (ya sea un valor, una fecha, una fórmula o un texto) y pegarlo en otra celda desprotegida pero sin afectar el formato de la celda destino.

Para esto, y con la ayuda de mucha información de este foro, utilicé el siguiente código :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
On Error Resume Next
Select Case Application.CutCopyMode
Case Is = False
'do nothing
Case Is = xlCopy
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Case Is = xlCut

'do nothing

End Sub

Y funciona casi muy bien... El problema que veo es que un vez que copio una o mas celdas, al seleccionar otra celda con el ratón o con las flechas del teclado, se me vá pegando el destino automáticamente, sin esperar que le de "Enter" o que elija pegar desde el menú, o que elija Ctrl +"B", si no que a medida que me desplazo con el cursor o con el más a otra celda va y lo pega de una vez.

¿Me ayudan a corregir esto?

1 respuesta

Respuesta
1

El problema esta en que encontraste la macro que querías sin conocer su funcionamiento te explico, la macro esta nombrada

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel. Range)

Esto quiere decir que la amcro se va a ejecutar en cualquier hoja del libro cada vez que algo en una de las hojas cambie en este caso cada vayas a realizar una copia mientras el origen de la copia este activo cada que des click va a copiar sin pedirte autorización o una confirmación de copia

Puedes cambiar la línea en cuestión por esta otra

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Con lo cual cada que actives el botón derecho antes de mostrarte el menu contextual te hará una copia en el rango que elijas, ojo tienes que deseleccionar el origen de la copia o seguirá copiando cada de presiones el botón derecho, la otra es cambiar a línea por esta

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Con esta línea ahora la macro se activara dando doble click la desventaja es que no funciona con más de 1 celda lo que copies sera 1 a 1

Como ultima opción esta agregar una condición if a tu macro, así te va a preguntar si quieres copiar la información a otro rango especifico, ojo debes dar esc después de que copie la información.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Select Case Application.CutCopyMode
Case Is = False
'do nothing
Case Is = xlCopy
copia = MsgBox("copiar en este rango", vbYesNo, "AVISO EXCEL")
If copia = 6 Then
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Case Is = xlCut
End Select
End Sub

Gracias JB por tu respuesta... a lo mejor me puedes ayudar de otra manera, la idea es que cuando copies algo se respete el formato de destino, sería ideal que la opción copiar /pegar funcione como funciona normalmente el excel (con teclado, botón derecho, etc...) pero que no pegue el formato de la celda origen...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas