Una macro esta errando ciertos cálculos

20/03/2006 - 15:50 por Diego | Informe spam
Hola a todos.

Necesito una mano, tengo una macro para dar formatos condicionales a una
serie de celdas. Copio parte de la macro:

Case ">"
For c = 1 To 16
With Cells(Fila, 14 + c)
With .FormatConditions
.Delete
.Add Type:=xlCellValue, Operator:=xlGreaterEqual,
Formula1:= _
"=0.95*$N" & Fila
.Add Type:=xlCellValue, Operator:=xlLess,
Formula1:= _
"=0.95*$N" & Fila
End With
.FormatConditions(1).Font.ColorIndex = 10
.FormatConditions(2).Font.ColorIndex = 3
End With
Next c

este bloque esta dentro de un do while donde vario el valor de la vble "Fila".
El problema ocurre con la vble "Fila"en la fórmula del condicional "
Formula1:= "=0.95*$N" & Fila ".
Cuando ejecuto la macro, la primera fila (ej. Fila=3) los valores van OK,
cuando la vble Fila=4, se seleccionan las celdas dela fila 4, pero el valor
en el condicional que debe ser reemplazado por 4, aparece 5, y de allí en
adelante, las formuals muestran una progresión de 2 en 2 para cada fila.
Si la ejecuto paso a paso, el problema persiste solo en la 1a celda de la 1a
fila, selecciona un valor anterior y las otras celdas de la misma fila ya
aparecen con el dato corregido.

Espero puedan ayudarme,

Gracias.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/03/2006 - 07:39 | Informe spam
hola, Diego !

Lo que mencionas no esta ocurriendo. Lo raro es lo sgte, cosa que no mencione en el mensaje inicial [...]
Cuando ejecuto lo que hace es:
fila=4, selecciona celda C4 y le coloca el sgte formato condicional: =0.95*$N3
fila=5, selecciona celda C5 y formato condicional: 0.95*$N5...
fila=6, selecciona celda C6 y formato condicional: 0.95*$N7...
y el condicional empieza a viajar de 2 en 2, sin embargo selecciona las celdas correctas.
Si lo ejecuto paso a paso, la 1a celda de la 1a fila la coloca mal, el resto ok, siempre y cuando lo corra despacio.
Si lo ejecuto muy rapido, el error se repite.
He realizado seguimiento inclusive con la Ventana Locales, y la vble fila no cambio de valor al interior del "for"
No entiendo?
Creo que debe haber alguna referencia que no esta activa, y esta generando esta distorsion
he activado hasta las que conozco, pero el problema persiste.



el comportamiento que describes de que la variable 'empieza a viajar de 2 en 2, es... 'normal' [en este 'preciso' caso]... la 'razon' ?
1) cuando se 'aplican' formatos condicionales [por codigo] usando 'formulas' que deberan 'evaluar' -> referencias [semi]-relativas...
es de 'suma' importancia que -> la celda 'activa' [fisica y realmente] este 'de acuerdo' con dicha 'referencia' [semi]-relativa ;)
2) cuando se 'mezcla' una variable 'de avance' por filas, SIN que la celda 'activa' sea 'coherente' con dicha 'relatividad'...
el codigo trata de 'ajustar' el avance [Fila = Fila + 1] segun su 'correspondencia' con la fila 'real' -> de la celda 'activa' [fisica] :-(
3) puedes corregir dicho comportamiento... 'normal'... si...
a) aplicas el formato 'correcto' sobre la celda 'apropiada' [una sola celda/aplicacion] y...
b) copias SOLO el formato aplicado... al resto de las celdas :))

prueba con algo +/- como lo siguiente y... si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
en un modulo de codigo 'normal' ==Sub FC_macro()
Application.ScreenUpdating = False
With [c4]
.Select
With .FormatConditions
If .Count Then .Delete
.Add Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="=0.95*$n4"
End With
.FormatConditions(1).Font.ColorIndex = 10
.Copy
.Offset.Resize([a65536].End(xlUp).Row - 3, 5).PasteSpecial xlPasteFormats
Application.CutCopyMode = False
.Select
End With
End Sub
Respuesta Responder a este mensaje
#2 Diego
21/03/2006 - 16:36 | Informe spam
Funcionó perfecto, esa explicación era la que faltaba.
Muchas gracias.

"Héctor Miguel" escribió:

hola, Diego !

> Lo que mencionas no esta ocurriendo. Lo raro es lo sgte, cosa que no mencione en el mensaje inicial [...]
> Cuando ejecuto lo que hace es:
> fila=4, selecciona celda C4 y le coloca el sgte formato condicional: =0.95*$N3
> fila=5, selecciona celda C5 y formato condicional: 0.95*$N5...
> fila=6, selecciona celda C6 y formato condicional: 0.95*$N7...
> y el condicional empieza a viajar de 2 en 2, sin embargo selecciona las celdas correctas.
> Si lo ejecuto paso a paso, la 1a celda de la 1a fila la coloca mal, el resto ok, siempre y cuando lo corra despacio.
> Si lo ejecuto muy rapido, el error se repite.
> He realizado seguimiento inclusive con la Ventana Locales, y la vble fila no cambio de valor al interior del "for"
> No entiendo?
> Creo que debe haber alguna referencia que no esta activa, y esta generando esta distorsion
> he activado hasta las que conozco, pero el problema persiste.

el comportamiento que describes de que la variable 'empieza a viajar de 2 en 2, es... 'normal' [en este 'preciso' caso]... la 'razon' ?
1) cuando se 'aplican' formatos condicionales [por codigo] usando 'formulas' que deberan 'evaluar' -> referencias [semi]-relativas...
es de 'suma' importancia que -> la celda 'activa' [fisica y realmente] este 'de acuerdo' con dicha 'referencia' [semi]-relativa ;)
2) cuando se 'mezcla' una variable 'de avance' por filas, SIN que la celda 'activa' sea 'coherente' con dicha 'relatividad'...
el codigo trata de 'ajustar' el avance [Fila = Fila + 1] segun su 'correspondencia' con la fila 'real' -> de la celda 'activa' [fisica] :-(
3) puedes corregir dicho comportamiento... 'normal'... si...
a) aplicas el formato 'correcto' sobre la celda 'apropiada' [una sola celda/aplicacion] y...
b) copias SOLO el formato aplicado... al resto de las celdas :))

prueba con algo +/- como lo siguiente y... si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
en un modulo de codigo 'normal' ==> Sub FC_macro()
Application.ScreenUpdating = False
With [c4]
.Select
With .FormatConditions
If .Count Then .Delete
.Add Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="=0.95*$n4"
End With
.FormatConditions(1).Font.ColorIndex = 10
.Copy
.Offset.Resize([a65536].End(xlUp).Row - 3, 5).PasteSpecial xlPasteFormats
Application.CutCopyMode = False
.Select
End With
End Sub



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