Duda en manejo de rango

27/07/2005 - 08:36 por gazu | Informe spam
Su ayuda para resolver la siguiente duda:

Como puedo hacer que si se insertan celdas se modifique ( o se cambie el
rango N8:N16 a N8:N17 si se inseta un fila) en "Loceq" ya que lo uso para
indicar el rango de trabajo y pasar ese valor a otra instruccion (tambien se
modifica "j")

Sub VerificaCelda()

Workbooks("PUNTAS ver final.xls").Activate
Sheets(Julio).Activate

If NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ P" Then
Loceq = "N8:N16": i = 8: j = 16: Localiza 'Si coinciden ambos valores
se trasnfiere el control a Localiza
else
msgbox "error en captura"
end if
end sub

Preguntas similare

Leer las respuestas

#6 gazu
27/07/2005 - 11:25 | Informe spam
Gracias por su ayuda y perdon por no aclarar como es debido el problema (creo
que ya estan acostumbrados a asumir todos los posibles).



[pregunta]: y... donde 'encaja' algun mecanismo para detectar una insercion de filas ???

Como puedo hacer que si se insertan celdas se modifique (o se cambie el rango N8:N16 a N8:N17 si se inseta un fila) [...]





Tienes razon HM mi principal problema (debido a que aun no comprendo del
todo VBA) es que necesito asignarle a la variable Loceq el rango N8:N16
pero si se inserta una fila pueda tomarse ese nuevo rango, esto que se
realize en forma automatica por las siguientes razones:

a) El codigo anterior es solo de ejemplo y solo una pequeña parte ya que
existen mas conbinaciones y por lo tanto mas rangos a ubicar
b) La intension es que para evitar modificaciones erroneas se ajuste los
rangos en forma automatica ya que si inserto una linea en la celda N16 esto
desplaza los demas rangos

Me inclino a la opcion de definir un nombre al rango pero esto como lo
aplico en el codigo que puse como ejemplo (la opcion de dividirlo en 3 partes
creo que no aplica).

Pongo un codigo mas extendido como ejemplo (espero no se me escape algun
error por ahi):

Sub VerificaCelda()
Workbooks("PUNTAS ver final.xls").Activate
Sheets(Julio).Activate
If NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ P" Then
Loceq = "N8:N16": i = 8: j = 16: Localiza 'Si coinciden ambos valores se
trasnfiere el control a Localiza

elseif NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ R" Then
Loceq = "N19:N29": i = 19: j = 29: Localiza 'Si coinciden ambos valores se
trasnfiere el control a Localiza

else
msgbox "error en captura"
end if
end sub


Sub Localiza()
With Worksheets(Mimes)
For n = 1 To .Range(Loceq).Rows.Count
If WorksheetFunction.Count(.Range(Loceq).Rows(n)) <> 0 Then
'Código para el caso de que alguna celda del rango tenga un valor
i = i + 1

Else
'Código para el caso de que ninguna celda tenga un valor
For MiCuenta = i To j

With Worksheets(Julio).Cells(MiCuenta, 14)
If .Value = "" Then .Value = MiTurnoes

End With
Next
End If
Next n
End With
End Sub

Para mas comentarios estoy a sus ordenes
Saludos
Gazu



"Héctor Miguel" escribió:

hola, gazu !

> ... hacer que si se insertan celdas se modifique (o se cambie el rango N8:N16 a N8:N17... (tambien se modifica "j")
> Sub VerificaCelda()
> Workbooks("PUNTAS ver final.xls").Activate
> Sheets(Julio).Activate
> If NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ P" Then
> Loceq = "N8:N16": i = 8: j = 16: Localiza 'Si coinciden ambos valores se trasnfiere el control a Localiza
> else
> msgbox "error en captura"
> end if
> end sub

una posibe alternativa pudiera ser asignar nombre al rango indicado -?-
[aunque... si la insercion de filas 'depende' del usuario 'en turno']...
-> no existe un evento que 'detecte' si se insertan/eliminan filas/columnas [excepto por un 'des-hacer ->inmediato<-'] :-(
[creo que] necesitaras pensar en otro tipo de mecanismo para ir ajustando el rango segun sea necesario.
solo considera lo siguiente:
1.- los argumentos-rango en funciones son 'ajustables' [dentro] y 'semi-flexibles' [en los 'extremos'] [p.e.]
si 'suponemos' un rango comprendido por 'B11:B35', podriamos [imaginariamente] 'verlo' en tres partes:
a) 'extremo inicial' => la celda 'B11'
b) el rango 'medio' => las celdas 'B12:B34'
c) 'extremo final' => la celda 'B35'
2.- el 'comportamiento' al insertar / eliminar 'dentro' de ese rango seria...
a) el 'extremo inicial' SOLO se 'ajustara' si lo eliminas
b) lo que 'hagas' dentro de [o iniciando en] el 'rango medio' y 'extremo final' [insertar o eliminar] es 'ajustado'
[queda 'dentro' del rango 'final']
c) lo que 'insertes' A PARTIR [o ANTES] del 'extremo inicial' y DESPUES del 'extremo final'... queda FUERA

comentas datos adicionales?
saludos,
hector.



Respuesta Responder a este mensaje
#7 Héctor Miguel
28/07/2005 - 01:48 | Informe spam
hola, gazu !

... asignarle a la variable... el rango N8:N16 pero si se inserta una fila... tomarse ese nuevo rango... en forma automatica
... existen mas conbinaciones y por lo tanto mas rangos a ubicar
... evitar modificaciones erroneas... ajuste.. rangos en forma automatica... si inserto una linea en... N16... desplaza los demas rangos
... la opcion de definir un nombre al rango pero esto como lo aplico en el codigo
... la opcion de dividirlo en 3 partes creo que no aplica



1) lo de 'las tres partes de un rango'... NO es/era -precisamente- para 'dividirlo'... sino para ->imaginaria/visual[mente]<-...
+/- 'comprender' el comportamiento o des/ajuste de los rangos cuando se insertan/eliminan filas/columnas en 'alguna de esas partes' :))
2) como ya lo expuso KL... al establecer [celdas/direcciones/... de] referencias a rangos al estilo 'hard-coded' [como N8:N16]...
es como 'dejarlas FIJAS' [es decir... como 'decirle' al codigo: 'NO importa que haga el usuario... SIEMPRE refierete a N8:N16] :-(
3) para establecer referencias 'dinamicas' a celdas/rangos ->por codigo<-... [ademas de los ejemplos en la pagina 'sugerida']...
podrias asignar nombres [p.e.] a la celda inicial de cada x_rango... o a cada rango 'en su totalidad' [entre otras variantes mas] :))
4) SI... lo que 'suceda' en/dentro/cerca/fuera/... de cada _rango... -> depende... del usuario 'en turno'... [me temo que]...
hacer que el codigo prevenga/detecte/corrija/evite/... -posibles- situaciones que pudieran derivar en errores subsecuentes...
va a depender [a su vez] de que tipo de eventualidades pudieran generarse por causa del usuario -?- [p.e.]
a) si inserta columnas [en alguna parte de cada x_rango]... debe esperar el codigo que el -nuevo- rango este 'lleno' totalmente ?
o... existe la posibilidad de que queden celdas 'vacias' de por medio ???
b) dependiendo de la/s situaciones 'imaginadas'... pudiera necesitarse de un '.Offset'... un '.End(xlDown)'... un '.Resize' o... -???-
c) otra alternativa 'mano-dura' pudiera ser 'evitar' que el usuario pueda insertar/eliminar 'a voluntad' [que se lo pida al codigo] :))

... codigo mas extendido como ejemplo (espero no se me escape algun error por ahi):
Sub VerificaCelda()
Workbooks("PUNTAS ver final.xls").Activate
Sheets(Julio).Activate
If NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ P" Then
Loceq = "N8:N16": i = 8: j = 16: Localiza 'Si coinciden ambos valores se trasnfiere el control a Localiza
elseif NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ R" Then
Loceq = "N19:N29": i = 19: j = 29: Localiza 'Si coinciden ambos valores se trasnfiere el control a Localiza
else
msgbox "error en captura"
end if
end sub [...]



5) de esta fraccion de codigo... pudiera 'asumirse'... un 'patron' de 2 filas 'entre' el final de un rango y el inicio del siguiente ???
6) [seguramente] el codigo 'real' tendra bastantes mas variables y 'derivaciones' que las que alcanzas a exponer :) [pero]...
sugerirte alguna propuesta para solucionar -solo- la parte 'visible/adivinable/...' de esta consulta...
[probablemente]... va a 'llevarse su tiempo' si esperas una solucion 'integral' para tu aplicacion :-(

comentas si prefieres comenzar con nombrar los x_rangos necesarios ? [ya sea la celda inicial o cada rango completo]
o... si crees que ninguno de los 'tips' de la pagina sugerida pudiera ser 'funcional' ? [para no 'buscarle por ahi'] :(

saludos,
hector.
Respuesta Responder a este mensaje
#8 gazu
29/07/2005 - 14:33 | Informe spam
KL y Hector M

Una disculpa por darles una respuesta tardia, ya me quedo claro que la
solucion que buscaba era complicada pero gracias a su ayuda analize el
problema y gracias a la pagina que me sugeriste se me ocurrio otra forma de
lograr lo que ocupo aunque necesito documentarme un poco mas.

Por sus consejos Gracias.

Saludos
Gazu

"Héctor Miguel" escribió:

hola, gazu !

> ... asignarle a la variable... el rango N8:N16 pero si se inserta una fila... tomarse ese nuevo rango... en forma automatica
> ... existen mas conbinaciones y por lo tanto mas rangos a ubicar
> ... evitar modificaciones erroneas... ajuste.. rangos en forma automatica... si inserto una linea en... N16... desplaza los demas rangos
> ... la opcion de definir un nombre al rango pero esto como lo aplico en el codigo
> ... la opcion de dividirlo en 3 partes creo que no aplica

1) lo de 'las tres partes de un rango'... NO es/era -precisamente- para 'dividirlo'... sino para ->imaginaria/visual[mente]<-...
+/- 'comprender' el comportamiento o des/ajuste de los rangos cuando se insertan/eliminan filas/columnas en 'alguna de esas partes' :))
2) como ya lo expuso KL... al establecer [celdas/direcciones/... de] referencias a rangos al estilo 'hard-coded' [como N8:N16]...
es como 'dejarlas FIJAS' [es decir... como 'decirle' al codigo: 'NO importa que haga el usuario... SIEMPRE refierete a N8:N16] :-(
3) para establecer referencias 'dinamicas' a celdas/rangos ->por codigo<-... [ademas de los ejemplos en la pagina 'sugerida']...
podrias asignar nombres [p.e.] a la celda inicial de cada x_rango... o a cada rango 'en su totalidad' [entre otras variantes mas] :))
4) SI... lo que 'suceda' en/dentro/cerca/fuera/... de cada _rango... -> depende... del usuario 'en turno'... [me temo que]...
hacer que el codigo prevenga/detecte/corrija/evite/... -posibles- situaciones que pudieran derivar en errores subsecuentes...
va a depender [a su vez] de que tipo de eventualidades pudieran generarse por causa del usuario -?- [p.e.]
a) si inserta columnas [en alguna parte de cada x_rango]... debe esperar el codigo que el -nuevo- rango este 'lleno' totalmente ?
o... existe la posibilidad de que queden celdas 'vacias' de por medio ???
b) dependiendo de la/s situaciones 'imaginadas'... pudiera necesitarse de un '.Offset'... un '.End(xlDown)'... un '.Resize' o... -???-
c) otra alternativa 'mano-dura' pudiera ser 'evitar' que el usuario pueda insertar/eliminar 'a voluntad' [que se lo pida al codigo] :))

> ... codigo mas extendido como ejemplo (espero no se me escape algun error por ahi):
> Sub VerificaCelda()
> Workbooks("PUNTAS ver final.xls").Activate
> Sheets(Julio).Activate
> If NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ P" Then
> Loceq = "N8:N16": i = 8: j = 16: Localiza 'Si coinciden ambos valores se trasnfiere el control a Localiza
> elseif NumEquipo1 = "Quasi 550" And TipoPuntas = "UQ R" Then
> Loceq = "N19:N29": i = 19: j = 29: Localiza 'Si coinciden ambos valores se trasnfiere el control a Localiza
> else
> msgbox "error en captura"
> end if
> end sub [...]

5) de esta fraccion de codigo... pudiera 'asumirse'... un 'patron' de 2 filas 'entre' el final de un rango y el inicio del siguiente ???
6) [seguramente] el codigo 'real' tendra bastantes mas variables y 'derivaciones' que las que alcanzas a exponer :) [pero]...
sugerirte alguna propuesta para solucionar -solo- la parte 'visible/adivinable/...' de esta consulta...
[probablemente]... va a 'llevarse su tiempo' si esperas una solucion 'integral' para tu aplicacion :-(

comentas si prefieres comenzar con nombrar los x_rangos necesarios ? [ya sea la celda inicial o cada rango completo]
o... si crees que ninguno de los 'tips' de la pagina sugerida pudiera ser 'funcional' ? [para no 'buscarle por ahi'] :(

saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida