Foros del Web » Soporte técnico » Ofimática »

vba: macro que se ejecute al pegar

Estas en el tema de vba: macro que se ejecute al pegar en el foro de Ofimática en Foros del Web. Hola, estoy trabajando con un archivo excel, en el que debo hacer unas comprobaciones en cuanto se pegue un grupo de valores en en un ...
  #1 (permalink)  
Antiguo 01/02/2011, 03:57
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 3 meses
Puntos: 0
vba: macro que se ejecute al pegar

Hola,

estoy trabajando con un archivo excel, en el que debo hacer unas comprobaciones en cuanto se pegue un grupo de valores en en un conjunto de celdas en concreto.

Así pués, mi intención es encontrar una manera que cuando se pegue algun valor en la hoja concreta y que corresponde a ese rango de celdas, se ejecute una macro. Hay alguna manera o algun evento que se active cuando se pega algo en una hoja de excel?

Empecé haciéndolo en el evento Worksheet_Change, teniendo encuenta si se modificaba alguna celda de las que debo controlar, pero si pego un rango de valores, sólo me saltaba el evento para la primera celda de las que pegaba.

Por ejemplo, si pego de "B4" a K9 se ejecutaba:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B4", "K9")) Is Nothing Then
// Código que quiero que salte para cada una de las celdas pegadas


Pero sólo se ejecutaba este código para B4 y necesitaría que se ejecutara para cada celda pegada. Como que no siempre serán las mismas celdas las que se peguen, no debería modificar siempre todo el rango ya que hace la macro demasiado lenta.

Muchas gracias.
  #2 (permalink)  
Antiguo 01/02/2011, 17:08
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
De acuerdo vba: macro que se ejecute al pegar

Hola! negu.
En realidad estás utilizando mal el evento Change.

¿Por qué? Pues, de hecho, Target contiene a todas las celdas involucradas en el cambio.

Te muestro un ejemplo sencillo:
Código vb:
Ver original
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim C As Range, myTxt As String
  3. For Each C In Target
  4.   myTxt = myTxt & vbLf & C.Address
  5. Next C
  6. MsgBox myTxt
  7. End Sub
¿Qué hace este código?... "Arma" un texto que contiene las celdas involucradas en el cambio (prueba pegar 3, 4 ó más celdas simultáneamente) y muestra el mensaje mediante un msgbox.

¿Qué es lo que te estaba faltando considerar? El "For Each C in Target".

Para tu necesidad particular, tan solo reemplazas el
myTxt = myTxt & vbLf & C.Address

por tu código.

Saludos, Cacho.

Última edición por mrocf; 01/02/2011 a las 17:14
  #3 (permalink)  
Antiguo 04/02/2011, 03:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: vba: macro que se ejecute al pegar

Muchas gracias. De esta manera ya no tengo ningún problema.

¡Muy buena y didáctica respuesta!

Saludos.
  #4 (permalink)  
Antiguo 04/02/2011, 11:05
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Respuesta: vba: macro que se ejecute al pegar

Gracias y hasta la próxima, Cacho.

Etiquetas: macro, pegar, vba
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:57.