FUNCION VOLATIL ??

27/06/2007 - 04:08 por Orfao | Informe spam
Function SGLOBAL1(A As Range, B As Range, C As Integer, D As Range)
Dim X As Integer
Dim Y As Integer
SGLOBAL1 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL1 = SGLOBAL1 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column)
End If
Next
End Function
Function SGLOBAL2(A As Range, B As Range, C As Integer, D As Range, E As
Range)
Dim X As Integer
Dim Y As Integer
SGLOBAL2 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL2 = SGLOBAL2 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column) *
VBAProject.Hoja1.Cells(E.Row + Y, E.Column)
End If
Next
End Function
Function SGLOBAL3(A As Range, B As Range, C As Integer, D As Range, E As
Range, F As Integer)
Dim X As Integer
Dim Y As Integer
SGLOBAL3 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL3 = SGLOBAL3 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column) *
VBAProject.Hoja1.Cells(E.Row + Y, E.Column) *
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, F, 0) / 100
End If
Next
End Function



Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Orfao
27/06/2007 - 04:20 | Informe spam
Hola Grupo...
Tengo estas tres funciones definidas...
Como las modifico para que retornen el mismo resultado pero que dejen de ser
volatiles.
el problema es que cuando ejecuto el codigo paso a paso para verificar algun
cambio o valor de cualquier macro al modificar cualquier celda me cae en
estas funciones que se repiten cerca de en 300 filas y luego se vuelve a
"como que a recilar" y para salir debo darle a f5 con lo que pierdo lo que
deseo hacer..
O en otro caso como hago para que cuando la macro pase a estas funciones lo
haga sin interrupcion y luego al calcular o recalcular vuelva al paso a
paso???
Me alimento del conocimiento de todos


"Orfao" wrote:

Function SGLOBAL1(A As Range, B As Range, C As Integer, D As Range)
Dim X As Integer
Dim Y As Integer
SGLOBAL1 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL1 = SGLOBAL1 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column)
End If
Next
End Function
Function SGLOBAL2(A As Range, B As Range, C As Integer, D As Range, E As
Range)
Dim X As Integer
Dim Y As Integer
SGLOBAL2 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL2 = SGLOBAL2 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column) *
VBAProject.Hoja1.Cells(E.Row + Y, E.Column)
End If
Next
End Function
Function SGLOBAL3(A As Range, B As Range, C As Integer, D As Range, E As
Range, F As Integer)
Dim X As Integer
Dim Y As Integer
SGLOBAL3 = 0
X = A.Count
For Y = 0 To X - 1
If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then
SGLOBAL3 = SGLOBAL3 +
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, C, 0) * VBAProject.Hoja1.Cells(D.Row + Y, D.Column) *
VBAProject.Hoja1.Cells(E.Row + Y, E.Column) *
Application.WorksheetFunction.VLookup(VBAProject.Hoja1.Cells(A.Row + Y,
A.Column), B, F, 0) / 100
End If
Next
End Function



Me alimento del conocimiento de todos
Respuesta Responder a este mensaje
#2 Héctor Miguel
27/06/2007 - 05:58 | Informe spam
hola, moises !

Tengo estas tres funciones definidas...
Como las modifico para que retornen el mismo resultado pero que dejen de ser volatiles.



1) [hasta donde se] las funciones definidas por el usuario para su uso en formulas de hoja de calculo...
no son 'volatiles' [por omision] y solo se re/calculan cuando se modifican los argumentos de la misma
[a menos que obligues a la funcion a que se volatilice dentro del codigo con una instruccion como Volatile = True]

... cuando ejecuto el codigo paso a paso para verificar algun cambio o valor de cualquier macro
al modificar cualquier celda me cae en estas funciones que se repiten cerca de en 300 filas
y luego se vuelve a "como que a recilar" y para salir debo darle a f5 con lo que pierdo lo que deseo hacer.



2) [seguramente] al ejecutar paso-a-paso procedimientos que modifican celdas donde se utilizan tus funciones
la funcion contiene 'barridos/bucles/ciclos/...' en tantas ocasiones como numero de celdas existan en sus argumentos
y dado que estas ejecutando 'paso-a-paso'... cada celda/verificacion/... significa una interrupcion [o paso] a ejecutar :-((

O en otro caso como hago para que cuando la macro pase a estas funciones lo haga sin interrupcion
y luego al calcular o recalcular vuelva al paso a paso?



3) [probablemente] sera mejor si desarrollas formulas *directas* en la hoja con funciones de hoja de calculo
-> para obtener +/- lo mismo que hacen tus funciones [un sumaproducto ?]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Orfao
29/06/2007 - 03:28 | Informe spam
Hola Miguel...
Disculpa que insista con esto. pero...
no se si tenga mal formulada la funcion pero con solo cambiar la hoja activa
se recalculan las caldas que contienen esa formula tal vez sea porque
indiquie en la funcion "Hoja1" o de pronto la Funcion "VLookup".
El hecho es que la he probado con application.volatil true y si ella y
aparentemente se comporta siempre como volatil
Alguna explicacion ???
o alguna forma de saltar (obviar) ese codigo cuando ejecuto paso a paso?
sin tener que cambiar las formulas una a una por texto quitandole el =+ ??
Gracias...
Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> Tengo estas tres funciones definidas...
> Como las modifico para que retornen el mismo resultado pero que dejen de ser volatiles.

1) [hasta donde se] las funciones definidas por el usuario para su uso en formulas de hoja de calculo...
no son 'volatiles' [por omision] y solo se re/calculan cuando se modifican los argumentos de la misma
[a menos que obligues a la funcion a que se volatilice dentro del codigo con una instruccion como Volatile = True]

> ... cuando ejecuto el codigo paso a paso para verificar algun cambio o valor de cualquier macro
> al modificar cualquier celda me cae en estas funciones que se repiten cerca de en 300 filas
> y luego se vuelve a "como que a recilar" y para salir debo darle a f5 con lo que pierdo lo que deseo hacer.

2) [seguramente] al ejecutar paso-a-paso procedimientos que modifican celdas donde se utilizan tus funciones
la funcion contiene 'barridos/bucles/ciclos/...' en tantas ocasiones como numero de celdas existan en sus argumentos
y dado que estas ejecutando 'paso-a-paso'... cada celda/verificacion/... significa una interrupcion [o paso] a ejecutar :-((

> O en otro caso como hago para que cuando la macro pase a estas funciones lo haga sin interrupcion
> y luego al calcular o recalcular vuelva al paso a paso?

3) [probablemente] sera mejor si desarrollas formulas *directas* en la hoja con funciones de hoja de calculo
-> para obtener +/- lo mismo que hacen tus funciones [un sumaproducto ?]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#4 Héctor Miguel
29/06/2007 - 05:56 | Informe spam
hola, moises !
Disculpa que insista con esto. pero...
no se si tenga mal formulada la funcion pero con solo cambiar la hoja activa se recalculan las caldas que contienen esa formula
tal vez sea porque indiquie en la funcion "Hoja1" o de pronto la Funcion "VLookup".
El hecho es que la he probado con application.volatil true y sin ella y aparentemente se comporta siempre como volatil
Alguna explicacion ???
o alguna forma de saltar (obviar) ese codigo cuando ejecuto paso a paso?
sin tener que cambiar las formulas una a una por texto quitandole el =+ ??



1) [primero] dejame tambien insistir en el tercer punto de mi sugerencia anterior...
3) [probablemente] sera mejor si desarrollas formulas *directas* en la hoja con funciones de hoja de calculo
-> para obtener +/- lo mismo que hacen tus funciones [un sumaproducto ?]





2) aunque no comentas como es el uso que das a las funciones expuestas [como le pasas los argumentos y en que hoja la usas]
se entiende que la intencion de *delimitar* [o circunscribir] la busqueda a *ciertos* rangos de la hoja1 [codename de tu hoja]
y probablemente implique complicaciones *la forma* de uso del codename de tu hoja1 en el algoritmo de tus funciones [p.e.]
cuando estableces: -> If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then [...]
a) *nota* que el codename "VBAProject" es *comun* a la gran mayoria de los libros [en vba como su codename]
esto podria estar *retrasando* el metodo que use vba para *identificar* a cual de todos los VBAProjects quieres hacer referencia -???-
b) [probablemente] seria mejor si cambias de VBAProject.Hoja1 [...] por: -> ThisWorkbok.Hoja1 [...]
[aunque tampoco seria una *garantia* de que se resolveran los problemas que comentas] :-((

3) dejame insistir [ademas] en que el *modelo* que estas usando... ya trae sus propias... *circunstancias especiales* [p.e.]
el [ab]uso de celdas combinadas... [posiblemente] un exceso en formulas con rangos dependientes/precedentes...
sin contar todavia con hojas copiadas, imagenes incluidas, hojas ocultas etc. que pudieran estar *multiplicando* los factores
[al menos, en el archivo ultimo *conocido*] -???-

4) creo [mas seguro que probable] que los problemas que estas encontrando se deberan a algunos *limites excedidos* [para excel]
podrias analizar [de criterios expertos] algunas de las posibles causas [quiza combinadas] en la pagina de Charles Williams [p.e.]
Status Bar Shows “CALCULATE”
http://www.decisionmodels.com/calcsecretsf.htm
User-Defined Functions
http://www.decisionmodels.com/calcsecretsj.htm
Unexpectedly returning #Value, the wrong answer, or being recalculated more than once.
http://www.decisionmodels.com/calcs....htm#value
[otros temas relacionados]:
Dependency Trees
http://www.decisionmodels.com/calcsecretsd.htm
Volatile Functions [posibles causas de volatilidad en los re/calculos]:
http://www.decisionmodels.com/calcsecretsi.htm
Circumstances causing a formula to be evaluated
http://www.decisionmodels.com/calcsecretsb.htm

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 Orfao
29/06/2007 - 06:26 | Informe spam
Gracias Hector...
Dejame analizar (Estudiar) los links a que te refieres y hacer algunas
pruebas
luego te comento sobre lo resultante de todo. Esto es sobre un mismo post
anterior (FUNCION SGLOBA) donde me ayudaste a generar una funcion con desref
que hacia el mismo calculo y si me sirvio. (si no me equivoco creo que te
mande copia de parte del libro) pero decidi al final optar por la funcion la
cual se ejecuta de una manera mucho mas rapida (No entiendo porque) pero en
fin... voy a probar...
Ah... otra cosa. en el post referente a FORMULA EXTENSA ... de la semana
pasada.. donde tanto Tu como K.L. intervinieron de forma explendida (por lo
cual estoy agradecido) Hice un ultimo comentario y les califique como
acertada vuestras respuestas pero... no se si por el hecho mismo de
calificarlos implica que todo quedo ahí y no hubo continuidad sobre el tema.
me quedaron algunas dudas (En especial si se referian a mi cuando hablaban de
OP ???)
Gracias de nuevo y discupa mi necedad...

Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !
> Disculpa que insista con esto. pero...
> no se si tenga mal formulada la funcion pero con solo cambiar la hoja activa se recalculan las caldas que contienen esa formula
> tal vez sea porque indiquie en la funcion "Hoja1" o de pronto la Funcion "VLookup".
> El hecho es que la he probado con application.volatil true y sin ella y aparentemente se comporta siempre como volatil
> Alguna explicacion ???
> o alguna forma de saltar (obviar) ese codigo cuando ejecuto paso a paso?
> sin tener que cambiar las formulas una a una por texto quitandole el =+ ??

1) [primero] dejame tambien insistir en el tercer punto de mi sugerencia anterior...
>> 3) [probablemente] sera mejor si desarrollas formulas *directas* en la hoja con funciones de hoja de calculo
>> -> para obtener +/- lo mismo que hacen tus funciones [un sumaproducto ?]

2) aunque no comentas como es el uso que das a las funciones expuestas [como le pasas los argumentos y en que hoja la usas]
se entiende que la intencion de *delimitar* [o circunscribir] la busqueda a *ciertos* rangos de la hoja1 [codename de tu hoja]
y probablemente implique complicaciones *la forma* de uso del codename de tu hoja1 en el algoritmo de tus funciones [p.e.]
cuando estableces: -> If VBAProject.Hoja1.Cells(A.Row + Y, A.Column) <> "" Then [...]
a) *nota* que el codename "VBAProject" es *comun* a la gran mayoria de los libros [en vba como su codename]
esto podria estar *retrasando* el metodo que use vba para *identificar* a cual de todos los VBAProjects quieres hacer referencia -???-
b) [probablemente] seria mejor si cambias de VBAProject.Hoja1 [...] por: -> ThisWorkbok.Hoja1 [...]
[aunque tampoco seria una *garantia* de que se resolveran los problemas que comentas] :-((

3) dejame insistir [ademas] en que el *modelo* que estas usando... ya trae sus propias... *circunstancias especiales* [p.e.]
el [ab]uso de celdas combinadas... [posiblemente] un exceso en formulas con rangos dependientes/precedentes...
sin contar todavia con hojas copiadas, imagenes incluidas, hojas ocultas etc. que pudieran estar *multiplicando* los factores
[al menos, en el archivo ultimo *conocido*] -???-

4) creo [mas seguro que probable] que los problemas que estas encontrando se deberan a algunos *limites excedidos* [para excel]
podrias analizar [de criterios expertos] algunas de las posibles causas [quiza combinadas] en la pagina de Charles Williams [p.e.]
Status Bar Shows “CALCULATE”
http://www.decisionmodels.com/calcsecretsf.htm
User-Defined Functions
http://www.decisionmodels.com/calcsecretsj.htm
Unexpectedly returning #Value, the wrong answer, or being recalculated more than once.
http://www.decisionmodels.com/calcs....htm#value
[otros temas relacionados]:
Dependency Trees
http://www.decisionmodels.com/calcsecretsd.htm
Volatile Functions [posibles causas de volatilidad en los re/calculos]:
http://www.decisionmodels.com/calcsecretsi.htm
Circumstances causing a formula to be evaluated
http://www.decisionmodels.com/calcsecretsb.htm

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



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