Macro funcionando con modificación de página

Hola, quisiera saber si alguien sabe si existe alguna forma para que un macro que realiza funciones con determinadas celdas no se altere o siga funcionando con las mismas celdas si a la página se ve modificada, es decir se agregan columnas o filas.
Por ejemplo, supongamos que mi macro escribe "10400$" en la celda A3 y luego alguien agrega una fila arriba de A3 (supongamos que selecciona la fila 1 y pone insertar fila). Si corro mi macro nuevamente, este seguirá insertando "10400$" en A3. Yo quisiera saber si se puede AUTOmodificar el macro para que referencie y agregue "10400" en la nueva posición A4, ya que mi página ahora tomara el valor"10400" de la nueva posición A4
Espero que se haya entendido! Pienso que es un problema realmente para expertos!
Muchas gracias!
Tiwanacote

1 respuesta

Respuesta
1
Lo que yo hago en esos casos es darme una referencia. Me explico, para tu caso en particular puedes escribir A3 en la celda A3 y luego decirle a la macro que escriba encima de la celda A3, que la busque y la reemplace por el nuevo dato. Otra forma sería que bloqueras la hoja de tal modo que no se pudieran insertar filas en las filas superiores. Otra cosa que puedes hacer es que en vez de decirle a la macro que copie un dato en la celda A3, es que le digas que la copie debajo de la última celda de la columna 1, esto se hace con la función activecell. offset(0,1). select (el 1 significa una celda más abajo) y select. end(xldown). select para bajar el cursor (que es lo mismo que se hace en excel con la tecla control + la flecha para abajo). Si todas las celdas de la columna 1 van a estar ocupadas y tu tienes que escribir abajo de la última ocupada, tienes que colocarte en la primera celda A1 y luego control + flecha abajo y te deja en la última celda que tenga valor de la columna 1 y luego con el activecell. Offset te mueve 1 hacia abajo o 2 o 3 dependiendo de cuantas celdas quieras mover.
Sub Macro1()
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "10400$"
End Sub
1) Estuve probando y veo que la primera idea, la de colocar una referencia "A3" en la celda A3, luego agregar por ejemplo una fila y posteriormente buscar "A3", es una buena idea. El problema pienso que se complica cuando el usuario agrega aleatoriamente una o varias filas o columnas, en tal caso buscar la referencia "A3" seria muy complicado. ¿Estoy confundido?
2) La segunda opción la desconocía por completo, me parece brillante!. Por lo que veo es posible poner un marco de referencia absoluto al final de la página y moverse desde allí. Ahora, ¿cómo poder resolver lo siguiente?: Invirtiendo el asunto, supongamos que en lugar de escribir "10400$" en una celda para que esta información sea utilizada por otras celdas, necesito utilizar con mi macro la información de la celda, por ejemplo la B4. Si alguien agrega columnas o filas entonces mi macro recojera cualquier información! ¿Existe alguna manera de evitar esto?
Me demoro más explicando y entendiendo que haciéndolo. Envíame tu archivo a [email protected].

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas