Fijar una celda para ejecutar una macro

Tengo la siguiente macro al seleccionar una celda especifica en la cual ordeno un rango denominado (M_ENVASE) en la hoja MES ACTUAL, pero al eliminar celdas no me funciona ya que la celda a seleccionar no coinciden con la de la instrucción.

Agradezco su gentil colaboración.

If Target.Address = "$A$179" Then
Range("M_ENVASE").Select
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Add Key:=Range("PROVEEDOR_ENVASE").End(xlDown), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Add Key:=Range("FACT_ENVASE").End(xlDown), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("MES ACTUAL").Sort
.SetRange Range("M_ENVASE")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If

1 respuesta

Respuesta
1

No me funcionó el código que me enviaste, pero con este si me funciona:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$179" Then
Range("M_ENVASE").Select
Selection.Sort Key1:=Range("PROVEEDOR_ENVASE").End(xlDown), Order1:=xlAscending, Key2:=Range("FACT_ENVASE").End(xlDown) _
, Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
xlSortNormal
End If
End Sub

Ahora bien, si borras la fila donde se encuentran los nombres en el libro, según tu macro son: "M_ENVASE", "PROVEEDOR_ENVASE" y "FACT_ENVASE", la macro ya no va a funcionar. Por debajo de los nombres si puedes eliminar filas.

Prueba con la macro que te estoy enviando y me dices.

Saludos. Dam

Buen dia,

El error que tengo es en la instrucción If Target.Address = "$A$179" Then, específicamente en "$A$179" ya que ejecuta la macro en la celda A179 pero si elimino filas deseo que se ejecute en la fila que quede.

Gracias

Pero si eliminas filas, la celda A179 siempre será A179, tienes que entrar a la macro y ponerle otra celda, por ejemplo A153, de otra forma siempre evaluará A179

O cambia tu condición

If Target.Address = "$A$179"

Saludos. Dam

Hola, gracias por tu respuestas y espero ser mas especifico. en la celda A179 hay un encabezado de un listado y al seleccionar esta celda me ordena el listado dependiendo dos criterios, pero al eliminar filas el encabezado cambia de fila, lo que quiero es que al momento de seleccionar el encabezado me ordene el listado pero en la programación siempre me tomara la celda A179.

Gracias.

¿Pero dónde estás eliminado filas arriba o abajo del encabezado?

Saludos. Dam

Las filas se están eliminando arriba del encabezado.

¿Qué hay en la celda A179?

Lo que haya en esa celda ponlo en LA LÍNEA QUE TE INDICO

If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Value = "m_envase" Then ' AQUÍ PON EL TEXTO QUE TIENES

Range("M_ENVASE").Select
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Add Key:=Range("PROVEEDOR_ENVASE").End(xlDown), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("MES ACTUAL").Sort.SortFields.Add Key:=Range("FACT_ENVASE").End(xlDown), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("MES ACTUAL").Sort
.SetRange Range("M_ENVASE")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If

End If

Saludos. Dam

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas