Formulas propias en excell

12/04/2004 - 13:18 por Pepinho | Informe spam
Buenas, tengo un archivo en excell que cuenta con una hoja
resumen y una hoja por mes. En las hojas por meses tengo
vinculos a una serie de archivos en los que tengo la informacion
a poner en la hoja. Para simplificar el fichero cree una formula
que obtiene el nombre de la hoja. Algo asi como:

Function NombreHoja(CELDA As Range)
NombreHoja = ActiveSheet.Name
End Function

El problema que tengo es que si escribo la formula en la hoja y
presiono enter me devuelve el valor. Pero si copio la formula en
el resto de las hojas me mantiene el valor original hasta que
entro en la linea y presiono f2 y luego enter, que me lo
recalcula. Tambien me ocurre lo mismo si cambio el nombre de la
hoja.

Quisiera saber si existe alguna forma de que me actualice
correctamente estos datos.

Gracias.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
12/04/2004 - 16:16 | Informe spam
Si pones la instrucción

Application.Volatile

como primera línea de la función (después de la declaración Function...), obligarás a Excel a calcular la fórmula cada vez que se produzca un recálculo.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Pepinho" escribió en el mensaje news:
Buenas, tengo un archivo en excell que cuenta con una hoja
resumen y una hoja por mes. En las hojas por meses tengo
vinculos a una serie de archivos en los que tengo la informacion
a poner en la hoja. Para simplificar el fichero cree una formula
que obtiene el nombre de la hoja. Algo asi como:

Function NombreHoja(CELDA As Range)
NombreHoja = ActiveSheet.Name
End Function

El problema que tengo es que si escribo la formula en la hoja y
presiono enter me devuelve el valor. Pero si copio la formula en
el resto de las hojas me mantiene el valor original hasta que
entro en la linea y presiono f2 y luego enter, que me lo
recalcula. Tambien me ocurre lo mismo si cambio el nombre de la
hoja.

Quisiera saber si existe alguna forma de que me actualice
correctamente estos datos.

Gracias.
Respuesta Responder a este mensaje
#2 Pepinho
13/04/2004 - 10:22 | Informe spam
"Fernando Arroyo" wrote in
news:#:

Si pones la instrucción

Application.Volatile

como primera línea de la función (después de la declaración
Function...), obligarás a Excel a calcular la fórmula cada
vez que se produzca un recálculo. Un saludo.





La funcion la tengo asi

Function NOMBREHOJA(CELDA As Range)
Application.Volatile
hojanombre = ActiveSheet.Name
Select Case hojanombre
Case Is = "ENERO"
dato = 2
Case Is = "FEBRERO"
dato = 3
Case Is = "MARZO"
dato = 4
Case Is = "ABRIL"
dato = 5
Case Is = "MAYO"
dato = 6
Case Is = "JUNIO"
dato = 7
Case Is = "JULIO"
dato = 8
Case Is = "AGOSTO"
dato = 9
Case Is = "SEPTIEMBRE"
dato = 10
Case Is = "OCTUBRE"
dato = 11
Case Is = "NOVIEMBRE"
dato = 12
Case Is = "DICIEMBRE"
dato = 13
Case Else
dato = "ERROR"
End Select
NOMBREHOJA = dato
End Function

pero sigue devolviendo lo mismo en todas las hojas, es como si
la variable nombrehoja en vez de ser calculada para cada hoja,
solo lo fuera una vez, y luego usara el mismo valor en todas.
Esto hace que no resulte lo que pretendo hacer.

Gracias de todas formas.

Un saludo

P.D.: hay algun libro de excell avanzado y centrado en vba, o
de vba para office en general.
Respuesta Responder a este mensaje
#3 Fernando Arroyo
13/04/2004 - 16:05 | Informe spam
A mí la siguiente función (la tuya, un poco modificada) me funciona sin problemas:

Function NOMBREHOJA(CELDA As Range)
Application.Volatile

Select Case UCase(ActiveSheet.Name)
Case Is = "ENERO"
NOMBREHOJA = 2
Case Is = "FEBRERO"
NOMBREHOJA = 3
Case Is = "MARZO"
NOMBREHOJA = 4
Case Is = "ABRIL"
NOMBREHOJA = 5
Case Is = "MAYO"
NOMBREHOJA = 6
Case Is = "JUNIO"
NOMBREHOJA = 7
Case Is = "JULIO"
NOMBREHOJA = 8
Case Is = "AGOSTO"
NOMBREHOJA = 9
Case Is = "SEPTIEMBRE"
NOMBREHOJA = 10
Case Is = "OCTUBRE"
NOMBREHOJA = 11
Case Is = "NOVIEMBRE"
NOMBREHOJA = 12
Case Is = "DICIEMBRE"
NOMBREHOJA = 13
Case Else
NOMBREHOJA = "ERROR"
End Select

End Function

Al cambiar el nombre de la hoja, se actualiza el valor devuelto por la función.

De todas formas, creo que puedes conseguir lo mismo sin necesidad de código, usando la fórmula:

=COINCIDIR(MINUSC(EXTRAE(CELDA("nombrearchivo";A1);ENCONTRAR("]";CELDA("nombrearchivo";A1))+1;999));{"enero";"febrero";"marzo";"abril";"mayo";"junio";"julio";"agosto";"septiembre";"octubre";"noviembre";"diciembre"};0)+1

teniendo en cuenta que para que funcione es necesario haber guardado el libro al menos una vez.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Pepinho" escribió en el mensaje news:
"Fernando Arroyo" wrote in
news:#:

> Si pones la instrucción
>
> Application.Volatile
>
> como primera línea de la función (después de la declaración
> Function...), obligarás a Excel a calcular la fórmula cada
> vez que se produzca un recálculo. Un saludo.
>
>

La funcion la tengo asi

Function NOMBREHOJA(CELDA As Range)
Application.Volatile
hojanombre = ActiveSheet.Name
Select Case hojanombre
Case Is = "ENERO"
dato = 2
Case Is = "FEBRERO"
dato = 3
Case Is = "MARZO"
dato = 4
Case Is = "ABRIL"
dato = 5
Case Is = "MAYO"
dato = 6
Case Is = "JUNIO"
dato = 7
Case Is = "JULIO"
dato = 8
Case Is = "AGOSTO"
dato = 9
Case Is = "SEPTIEMBRE"
dato = 10
Case Is = "OCTUBRE"
dato = 11
Case Is = "NOVIEMBRE"
dato = 12
Case Is = "DICIEMBRE"
dato = 13
Case Else
dato = "ERROR"
End Select
NOMBREHOJA = dato
End Function

pero sigue devolviendo lo mismo en todas las hojas, es como si
la variable nombrehoja en vez de ser calculada para cada hoja,
solo lo fuera una vez, y luego usara el mismo valor en todas.
Esto hace que no resulte lo que pretendo hacer.

Gracias de todas formas.

Un saludo

P.D.: hay algun libro de excell avanzado y centrado en vba, o
de vba para office en general.
Respuesta Responder a este mensaje
#4 Pepinho
14/04/2004 - 13:42 | Informe spam
"Fernando Arroyo" wrote in
news::

A mí la siguiente función (la tuya, un poco modificada) me
funciona sin problemas:

De todas formas, creo que puedes conseguir lo mismo sin
necesidad de código, usando la fórmula:

=COINCIDIR(MINUSC(EXTRAE(CELDA("nombrearchivo";A1);ENCONTRAR
("]";CELDA("nombrearchivo";A1))+1;999));{"enero";"febrero";"
marzo";"abril";"mayo";"junio";"julio";"agosto";"septiembre";
"octubre";"noviembre";"diciembre"};0)+1

teniendo en cuenta que para que funcione es necesario haber
guardado el libro al menos una vez. Un saludo.



Gracias, lo probaré a ver como me va.

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