Evitar que la fórmula cambie de celda al ordenar

01/05/2006 - 12:41 por pacomar | Informe spam
Buenos días grupo.

Continuando lo aportado por Héctor Miguel en un post anterior donde me
explicaba la forma de quitar acentos, les cuento:

Con el fin de ordenarlas alfabéticamente (por población) y para
facilitar la navegación en una web mediante enlaces anterior y
siguiente; estoy haciendo una hoja de poblaciones y provincias y sus
correspondientes enlaces a la población anterior y siguiente que deben
aparecer de forma automática. En la Fila 1 están los rótulos de las
columnas y las columnas son: A:Población B: Provincia C:Enlace
pob_anterior D:Enlace pob_siguiente.
Los enlaces tienen esta estructura: "../alicante/benidorm.htm" , menos
el primero y el último donde cambian a: "alicante.htm" que es otra
página donde están listadas todas las poblaciones agrupadas por
provincias. Por lo tanto, si C3 hace relación a A2 con la fórmula
comentada anteriormente para quitar los acentos y sus correspondientes
& para completar, C2 tiene un valor fijo: "alicante.htm", ya que es la
primera y ésta celda siempre apuntará a "alicante.htm"
independientemente de la población que haya en cada momento en A2.
Esto mismo pasa en la última fila con datos en la hoja.

El problema que tengo es que cuando incluyo una población que se
coloca la primera o la última, al ordenar la columna poblaciones, las
fórmulas para los primeras o últimas celdas (las de después de
ordenar) de las columnas C y D devuelven un #!valor! al no encontrar lo
que se espera y las que estaban (antes de ordenar) primera o última
con un valor fijo: "alicante.htm", tampoco se corresponde con la nueva
ordenación.

Por otra parte, ¿se puede forzar a la hoja para que presente siempre
los datos ordenados por una columna concreta sin necesidad de picar en
el botón, o en su defecto se puede programar un botón para ordenar
por un rango de una columna?

Espero haberme explicado.

Saludos..

Paco.

PD. Héctor, perdona si no es ésta la forma, pero me ha parecido
interesante un post nuevo en vez de continuar en el anterior.

Preguntas similare

Leer las respuestas

#6 pacomar
03/05/2006 - 21:50 | Informe spam
Hola Héctor..

¡Perfecto!... me descubro Maestro.

No hace falta "volatilizar" las fórmulas, se actualizan perfectamente.

Sólo queda por resolver un par de cuestiones:

1 .- Que no aparezca "../" cuando el valor de C o D es "andalucia.htm",
ya que el enlace nos tiene que enviar al mismo directorio.

2 .- Te decía unos cuantos post más arriba: >>"Por otra parte, ¿se
puede forzar a la hoja para que presente siempre los datos ordenados
por una columna concreta sin necesidad de picar en el botón, o en su
defecto se puede programar un botón para ordenar por un rango de una
columna?"
- para 'auto-ordenar' listados, puedes usar codigo en el




evento '_change' de la hoja con el listado... de forma que se 'dispare'
cuando algun 'cambio' ocurre EN la columna que 'comanda' en el orden
del listado

Y aunque lo entiendo, no tengo ni idea de cómo hacerlo. Ni siquiera
cómo llegar al evento "_change". La columna a ordenar, evidentemente
sería A.

Gracias por todo.

Paco.
Respuesta Responder a este mensaje
#7 Héctor Miguel
04/05/2006 - 02:11 | Informe spam
hola, Paco !

... queda por resolver un par de cuestiones:
1 .- Que no aparezca "../" cuando el valor de C o D es "andalucia.htm" ...
2 .- ... forzar a la hoja para que presente siempre los datos ordenados por una columna concreta ...
... La columna a ordenar, evidentemente seria A.



1) cambia de lugar el 'anclaje' para que [solo] aparezca cuando sea 'necesario' [p.e.]
en vez de utilizarlo en la formula de las celdas 'enlace anterior' y 'enlace siguiente'...
muevelo a la formula donde se definen los nombres...
Enlace_ant:
=minusc(espacios(si(fila()>2;"../"&!$b1&" "&si(esnumero(hallar(" ";!$a1));izquierda(!$a1;hallar(" ";!$a1)-1);!$a1);"andalucia")))
Enlace_sig:
=minusc(espacios(si(esblanco(!$a3);"andalucia";"../"&!$b3&" "&si(esnumero(hallar(" ";!$a3));izquierda(!$a3;hallar(" ";!$a3)-1);!$a3))))

2) pon las siguientes lineas -> en el modulo de codigo de 'esa' hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a:a")) Is Nothing Then Exit Sub
Columns("a:d").Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlYes
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 pacomar
04/05/2006 - 02:39 | Informe spam
Hola Héctor...

Ok.. ¡Perfecto! Felicidades

Y ya para rizar el rizo, tengo un botón para imprimir la hoja con este
código:
Private Sub CommandButton1_Click()

Sheets("hoja1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1

End Sub

¿Se puede añadir una rutina para que ajuste la zona de impresión
antes de imprimir la hoja?

Saludos y gracias.
Respuesta Responder a este mensaje
#9 Héctor Miguel
04/05/2006 - 02:58 | Informe spam
hola, Paco !

... ya para rizar el rizo, tengo un botón para imprimir la hoja con este codigo:
Private Sub CommandButton1_Click()
Sheets("hoja1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub
... que ajuste la zona de impresion antes de imprimir la hoja?



si nada mas necesitas imprimir "hoja1", puedes omitir su 'seleccion' y definir el area
[p.e.] suponiendo que imprimes las columnas 'A:D' [independientemente de cuantas filas]...
Private Sub CommandButton1_Click()
With Worksheets("hoja1")
.PageSetup.PrintArea = "a:d"
.PrintOut
End With
End Sub

o puedes establecer un rango 'especifico' si cambias [p.e.] a: -> "a1:d45"

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#10 pacomar
04/05/2006 - 22:42 | Informe spam
Hola Héctor...

Otra vez he vuelto a explicarme mal.
Lo que quería decir es precisamente que el rango se estableciera él
solito al aumentar las filas en "hoja1", de tal forma que si hoy hay 10
filas y mañana introduzco 2 filas más, se establezca el área de
impresión automáticamente a 12 filas sin necesidad de definir un
rango de antemano.

Saludos..

Paco.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida