Como actualizar el valor de una celda con una funcion creada en vb

12/06/2009 - 09:33 por Marko | Informe spam
Hola,
En un libro Excel con varias hojas, dependiendo del valor de una celda
concreta de cada hoja, una funcion obtiene el número de la hoja, y otra
cuenta el numero total de hojas hasta la hoja que tiene el valor esperado en
dicha celda. Estas funciones están incluidas en un módulo VBA.
Por otro lado, en otra celda de cada hoja del libro, llamo a esas funciones
desde una formula que me presenta en estas celdas la expresión "Página 1 de
10", "Página 2 de 10", "Página 3 de 10", etc... lo cual es el objetivo que se
pretende, y hace muy cómodo no tener que escribirlo a mano cada vez que
cambie el total de hojas que se van a imprimir y evita errores.

El problema que tengo es que, para tener la expresión esperada en las celdas
que indican las páginas, tengo que Editar (F2) cada celda y aceptar (Intro)
la fórmula. Si no hago esto, conserva siempre el ultimo valor obtenido.

¿Cómo puedo hacer para que se actualicen automáticamente las expresiones,
cada vez que cambie el número total de páginas (1 de 4, 1 de 9, etc..)?

Indico a continuación, por si es útil también para alguien que quiera o
necesite poner la numeración de las páginas en un sitio distinto al Pie de
Página de Excel, el código utilizado.

FUNCIONES:

Function TotalPaginas()
Dim nPaginasCompletas, nPaginasLibro As Integer
nPaginasLibro = Worksheets.Count
For nPaginasCompletas = 1 To nPaginasLibro
If Worksheets(nPaginasCompletas).Range("k51").Value = "TOTAL €UROS" Then
If nPaginasCompletas < nPaginasLibro Then
TotalPaginas = nPaginasCompletas
GoTo Finalizar
Else
TotalPaginas = nPaginasLibro
End If
End If
Next
Finalizar:
End Function

Function NumeroHoja()
NumeroHoja = ActiveSheet.Index
End Function
************************************

En la celda donde presento "Página 1 de 5" o lo que sea, la formula es:

="Página " &NumeroHoja()& " de " &TotalPaginas()

Gracias por vuestra ayuda.
 

Leer las respuestas

#1 Héctor Miguel
12/06/2009 - 19:26 | Informe spam
hola, Marko !

1) en tu primera funcion personalizada (TotalPaginas) usa como primera instruccion la siguiente:
Application.Volatile

2) en tu segunda funcion personalizada (NumeroHoja) cambia la instruccion...
de: -> NumeroHoja = ActiveSheet.Index
a: -> NumeroHoja = Application.Caller.Parent.Index

saludos,
hector.

__ OP __
En un libro Excel con varias hojas, dependiendo del valor de una celda
concreta de cada hoja, una funcion obtiene el nàºmero de la hoja, y otra
cuenta el numero total de hojas hasta la hoja que tiene el valor esperado en
dicha celda. Estas funciones està¡n incluidas en un módulo VBA.
Por otro lado, en otra celda de cada hoja del libro, llamo a esas funciones
desde una formula que me presenta en estas celdas la expresión "Pà¡gina 1 de
10", "Pà¡gina 2 de 10", "Pà¡gina 3 de 10", etc... lo cual es el objetivo que se
pretende, y hace muy cómodo no tener que escribirlo a mano cada vez que
cambie el total de hojas que se van a imprimir y evita errores.

El problema que tengo es que, para tener la expresión esperada en las celdas
que indican las pà¡ginas, tengo que Editar (F2) cada celda y aceptar (Intro)
la fórmula. Si no hago esto, conserva siempre el ultimo valor obtenido.

¿Cómo puedo hacer para que se actualicen automà¡ticamente las expresiones,
cada vez que cambie el nàºmero total de pà¡ginas (1 de 4, 1 de 9, etc..)?

Indico a continuación, por si es àºtil también para alguien que quiera o
necesite poner la numeración de las pà¡ginas en un sitio distinto al Pie de
Pà¡gina de Excel, el código utilizado.

FUNCIONES:

Function TotalPaginas()
Dim nPaginasCompletas, nPaginasLibro As Integer
nPaginasLibro = Worksheets.Count
For nPaginasCompletas = 1 To nPaginasLibro
If Worksheets(nPaginasCompletas).Range("k51").Value = "TOTAL €UROS" Then
If nPaginasCompletas < nPaginasLibro Then
TotalPaginas = nPaginasCompletas
GoTo Finalizar
Else
TotalPaginas = nPaginasLibro
End If
End If
Next
Finalizar:
End Function

Function NumeroHoja()
NumeroHoja = ActiveSheet.Index
End Function
************************************

En la celda donde presento "Pà¡gina 1 de 5" o lo que sea, la formula es:

="Pà¡gina " &NumeroHoja()& " de " &TotalPaginas()

Gracias por vuestra ayuda.

Preguntas similares