Problemas al Actualizar Función Personalizada

20/12/2004 - 15:05 por Bart | Informe spam
Hola grupo, tengo el siguiente problema con una función personalizada:

Cuando creo por primera vez la fórmula toma muestra el valor que es, pero
cuando cambio el valor de las celdas a que hace referencia no actualiza el
valor calculado. El problema no es por configuración de Excel porque si hago
el cálculo directamente, sin utilizar la función que cree si se actualiza.

La función personalizada tiene dos variables, una que es una celda y otra
que es un rango. El problema esta cuando modifico alguno de los valores
contenidos en este último. La verdad no se que hacer.

Este es el contenido de la función en dos versiones y ambas presentan el
mismo problema:

Function PrecioAct(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim Vector As Range
Dim Capital As Double
Dim cell

i = 1
Set Vector = Range(Precio.Offset(0, 1), Precio.Offset(0, Pos))
Capital = Precio.Value

For Each cell In Vector
i = i * (1 + cell)
Next
PrecioAct = Round(Capital * i, 2)
End Function

Function Conver(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim j As Integer
Dim Capital As Double

i = 1
For j = 1 To Pos
i = i * (1 + Precio.Offset(0, j))
Next
Capital = Precio.Value

Conver = Round(Capital * i, 2)
End Function

Gracias y saludos.

B.M

Preguntas similare

Leer las respuestas

#1 Daniel.M
20/12/2004 - 15:54 | Informe spam
Hola,

Necesita usar de todas celdas con argumentos de la funcion. Es la sola manera
que Excel 'sabe' que hay un cambio en su celda (y activar el motor de
recalculacion).

Por ejemplo:
=conver2(G2,H2:J2)
o
=conver2(G2,DESREF(G2,0,1,1,3))

En el ultimo ejemplo, puede cambiar el 3 por un otra numero.

y este codigo VBA:

Function Conver2(ByVal Precio As Range, ByVal Interest As Range) As Double
Dim i As Double
Dim C As Range
Dim Capital As Double

i = 1
For Each C In Interest
i = i * (1 + C)
Next C
Capital = Precio.Value

Conver2 = Round(Capital * i, 2)
End Function

Saludos,

Daniel M.

"Bart" wrote in message
news:
Hola grupo, tengo el siguiente problema con una función personalizada:

Cuando creo por primera vez la fórmula toma muestra el valor que es, pero
cuando cambio el valor de las celdas a que hace referencia no actualiza el
valor calculado. El problema no es por configuración de Excel porque si hago
el cálculo directamente, sin utilizar la función que cree si se actualiza.

La función personalizada tiene dos variables, una que es una celda y otra
que es un rango. El problema esta cuando modifico alguno de los valores
contenidos en este último. La verdad no se que hacer.

Este es el contenido de la función en dos versiones y ambas presentan el
mismo problema:

Function PrecioAct(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim Vector As Range
Dim Capital As Double
Dim cell

i = 1
Set Vector = Range(Precio.Offset(0, 1), Precio.Offset(0, Pos))
Capital = Precio.Value

For Each cell In Vector
i = i * (1 + cell)
Next
PrecioAct = Round(Capital * i, 2)
End Function

Function Conver(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim j As Integer
Dim Capital As Double

i = 1
For j = 1 To Pos
i = i * (1 + Precio.Offset(0, j))
Next
Capital = Precio.Value

Conver = Round(Capital * i, 2)
End Function

Gracias y saludos.

B.M
Respuesta Responder a este mensaje
#2 Bart
20/12/2004 - 16:25 | Informe spam
Daniel:

Genial !!!!

Muchas gracias, me has salvado.

B.M.
Respuesta Responder a este mensaje
#3 KL
20/12/2004 - 17:32 | Informe spam
Hola Bart,

Creo q hay al menos una forma mas de conseguir lo q quieres y es q, si la
rapidez del modelo no es un problema (o sea q no hay demasiadas formulas q
usen mucha memoria y procesador), podrias hacer tu funcion volatil, es decir
se actualizaria cada vez q se recalculen las formulas. Solo tienes q anadir
una linea al principio del codigo de tu funcion (digamos despues de declarar
las variables):

Application.Volatile

Saludos,
KL




"Daniel.M" wrote in message
news:
Hola,

Necesita usar de todas celdas con argumentos de la funcion. Es la sola
manera
que Excel 'sabe' que hay un cambio en su celda (y activar el motor de
recalculacion).

Por ejemplo:
=conver2(G2,H2:J2)
o
=conver2(G2,DESREF(G2,0,1,1,3))

En el ultimo ejemplo, puede cambiar el 3 por un otra numero.

y este codigo VBA:

Function Conver2(ByVal Precio As Range, ByVal Interest As Range) As Double
Dim i As Double
Dim C As Range
Dim Capital As Double

i = 1
For Each C In Interest
i = i * (1 + C)
Next C
Capital = Precio.Value

Conver2 = Round(Capital * i, 2)
End Function

Saludos,

Daniel M.

"Bart" wrote in message
news:
Hola grupo, tengo el siguiente problema con una función personalizada:

Cuando creo por primera vez la fórmula toma muestra el valor que es, pero
cuando cambio el valor de las celdas a que hace referencia no actualiza
el
valor calculado. El problema no es por configuración de Excel porque si
hago
el cálculo directamente, sin utilizar la función que cree si se
actualiza.

La función personalizada tiene dos variables, una que es una celda y otra
que es un rango. El problema esta cuando modifico alguno de los valores
contenidos en este último. La verdad no se que hacer.

Este es el contenido de la función en dos versiones y ambas presentan el
mismo problema:

Function PrecioAct(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim Vector As Range
Dim Capital As Double
Dim cell

i = 1
Set Vector = Range(Precio.Offset(0, 1), Precio.Offset(0, Pos))
Capital = Precio.Value

For Each cell In Vector
i = i * (1 + cell)
Next
PrecioAct = Round(Capital * i, 2)
End Function

Function Conver(ByVal Precio As Range, ByVal Pos As Integer) As Double
Dim i As Double
Dim j As Integer
Dim Capital As Double

i = 1
For j = 1 To Pos
i = i * (1 + Precio.Offset(0, j))
Next
Capital = Precio.Value

Conver = Round(Capital * i, 2)
End Function

Gracias y saludos.

B.M




Respuesta Responder a este mensaje
#4 Juan Sánchez
20/12/2004 - 18:11 | Informe spam
Justo lo que necesitaba.
Gracias,
Juan

"KL" <lapink2000(at)hotmail.com> escribió en el mensaje
news:#
Hola Bart,

Creo q hay al menos una forma mas de conseguir lo q quieres y es q, si la
rapidez del modelo no es un problema (o sea q no hay demasiadas formulas q
usen mucha memoria y procesador), podrias hacer tu funcion volatil, es


decir
se actualizaria cada vez q se recalculen las formulas. Solo tienes q


anadir
una linea al principio del codigo de tu funcion (digamos despues de


declarar
las variables):

Application.Volatile

Saludos,
KL




"Daniel.M" wrote in message
news:
> Hola,
>
> Necesita usar de todas celdas con argumentos de la funcion. Es la sola
> manera
> que Excel 'sabe' que hay un cambio en su celda (y activar el motor de
> recalculacion).
>
> Por ejemplo:
> =conver2(G2,H2:J2)
> o
> =conver2(G2,DESREF(G2,0,1,1,3))
>
> En el ultimo ejemplo, puede cambiar el 3 por un otra numero.
>
> y este codigo VBA:
>
> Function Conver2(ByVal Precio As Range, ByVal Interest As Range) As


Double
> Dim i As Double
> Dim C As Range
> Dim Capital As Double
>
> i = 1
> For Each C In Interest
> i = i * (1 + C)
> Next C
> Capital = Precio.Value
>
> Conver2 = Round(Capital * i, 2)
> End Function
>
> Saludos,
>
> Daniel M.
>
> "Bart" wrote in message
> news:
>> Hola grupo, tengo el siguiente problema con una función personalizada:
>>
>> Cuando creo por primera vez la fórmula toma muestra el valor que es,


pero
>> cuando cambio el valor de las celdas a que hace referencia no actualiza
>> el
>> valor calculado. El problema no es por configuración de Excel porque


si
>> hago
>> el cálculo directamente, sin utilizar la función que cree si se
>> actualiza.
>>
>> La función personalizada tiene dos variables, una que es una celda y


otra
>> que es un rango. El problema esta cuando modifico alguno de los valores
>> contenidos en este último. La verdad no se que hacer.
>>
>> Este es el contenido de la función en dos versiones y ambas presentan


el
>> mismo problema:
>>
>> Function PrecioAct(ByVal Precio As Range, ByVal Pos As Integer) As


Double
>> Dim i As Double
>> Dim Vector As Range
>> Dim Capital As Double
>> Dim cell
>>
>> i = 1
>> Set Vector = Range(Precio.Offset(0, 1), Precio.Offset(0, Pos))
>> Capital = Precio.Value
>>
>> For Each cell In Vector
>> i = i * (1 + cell)
>> Next
>> PrecioAct = Round(Capital * i, 2)
>> End Function
>>
>> Function Conver(ByVal Precio As Range, ByVal Pos As Integer) As Double
>> Dim i As Double
>> Dim j As Integer
>> Dim Capital As Double
>>
>> i = 1
>> For j = 1 To Pos
>> i = i * (1 + Precio.Offset(0, j))
>> Next
>> Capital = Precio.Value
>>
>> Conver = Round(Capital * i, 2)
>> End Function
>>
>> Gracias y saludos.
>>
>> B.M
>
>


Respuesta Responder a este mensaje
#5 Daniel.M
20/12/2004 - 18:58 | Informe spam
Hola KL,

Es una posibilidad, y la mas facil. Para _mi_, no es una buena manera de solvar
este tipo de problema.

Es mejor de aprender como programar las funcionas VBA para incluir las celdas de
'dependencia' como parametros y usar bien de la recalculacion. Es la sola manera
de estructurar archivos Excel eficazes.

Si el no lo hace, cada vez que usa una funcion personalizada, va a necesitar de
anadir Application.Volatile.

Saludos,

Daniel M.

"KL" <lapink2000(at)hotmail.com> wrote in message
news:%
Hola Bart,

Creo q hay al menos una forma mas de conseguir lo q quieres y es q, si la
rapidez del modelo no es un problema (o sea q no hay demasiadas formulas q
usen mucha memoria y procesador), podrias hacer tu funcion volatil, es decir
se actualizaria cada vez q se recalculen las formulas. Solo tienes q anadir
una linea al principio del codigo de tu funcion (digamos despues de declarar
las variables):

Application.Volatile

Saludos,
KL




"Daniel.M" wrote in message
news:
> Hola,
>
> Necesita usar de todas celdas con argumentos de la funcion. Es la sola
> manera
> que Excel 'sabe' que hay un cambio en su celda (y activar el motor de
> recalculacion).
>
> Por ejemplo:
> =conver2(G2,H2:J2)
> o
> =conver2(G2,DESREF(G2,0,1,1,3))
>
> En el ultimo ejemplo, puede cambiar el 3 por un otra numero.
>
> y este codigo VBA:
>
> Function Conver2(ByVal Precio As Range, ByVal Interest As Range) As Double
> Dim i As Double
> Dim C As Range
> Dim Capital As Double
>
> i = 1
> For Each C In Interest
> i = i * (1 + C)
> Next C
> Capital = Precio.Value
>
> Conver2 = Round(Capital * i, 2)
> End Function
>
> Saludos,
>
> Daniel M.
>
> "Bart" wrote in message
> news:
>> Hola grupo, tengo el siguiente problema con una función personalizada:
>>
>> Cuando creo por primera vez la fórmula toma muestra el valor que es, pero
>> cuando cambio el valor de las celdas a que hace referencia no actualiza
>> el
>> valor calculado. El problema no es por configuración de Excel porque si
>> hago
>> el cálculo directamente, sin utilizar la función que cree si se
>> actualiza.
>>
>> La función personalizada tiene dos variables, una que es una celda y otra
>> que es un rango. El problema esta cuando modifico alguno de los valores
>> contenidos en este último. La verdad no se que hacer.
>>
>> Este es el contenido de la función en dos versiones y ambas presentan el
>> mismo problema:
>>
>> Function PrecioAct(ByVal Precio As Range, ByVal Pos As Integer) As Double
>> Dim i As Double
>> Dim Vector As Range
>> Dim Capital As Double
>> Dim cell
>>
>> i = 1
>> Set Vector = Range(Precio.Offset(0, 1), Precio.Offset(0, Pos))
>> Capital = Precio.Value
>>
>> For Each cell In Vector
>> i = i * (1 + cell)
>> Next
>> PrecioAct = Round(Capital * i, 2)
>> End Function
>>
>> Function Conver(ByVal Precio As Range, ByVal Pos As Integer) As Double
>> Dim i As Double
>> Dim j As Integer
>> Dim Capital As Double
>>
>> i = 1
>> For j = 1 To Pos
>> i = i * (1 + Precio.Offset(0, j))
>> Next
>> Capital = Precio.Value
>>
>> Conver = Round(Capital * i, 2)
>> End Function
>>
>> Gracias y saludos.
>>
>> B.M
>
>


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