Excel

Publicado: 10 de julio de 2013 en Actualidad

VBA: Una función personalizada para mostrar el Número de página en una celda.

Hace bastante tiempo mostré cómo conseguir identificar el número de página impresa directamente en una celda de nuestra Hoja de cálculo; mediante funciones macro 4.0 de Excel conseguíamos identificar en una celda la numeración de la hoja correspondiente al área de impresión (ver).

Hoy veremos otra forma de obtener el mismo resultado, de una manera algo más sencilla, mediante una función personalizada en VBA.

La idea sigue siendo la misma, para una hoja con un área de impresión definida, con diferentes saltos de página insertados, mostrar en la misma hoja de cálculo, en las celdas correspondientes, cuál es el número de página de un total de ellas.
Partiremos de una hoja con diferentes saltos de página:

VBA: Una función personalizada para mostrar el Número de página en una celda.

Insertamos el siguiente código VBA de nuestro procedimiento Function en un módulo del Explorador de proyectos del Editor de VBA:

view plainprint?

  1. Function InfoPag()
  2. Dim iPags As Integer, iPag As Integer
  3. Dim iCols As Integer, iCol As Integer
  4. Dim lfilas As Long, lfila As Long
  5. Dim x As Long, y As Long
  6. Application.Volatile
  7. Dim direccion As Range
  8. ‘controlamos la dirección de la celda donde se encuentra la función
  9. Set direccion = Range(Application.Caller.Address)
  10. ‘contamos saltos de página (horizontales y verticales)
  11. With ActiveSheet
  12. lfilas = .HPageBreaks.Count
  13. iCols = .VPageBreaks.Count
  14. End With
  15. ‘calculamos el número total de páginas
  16. iPags = (lfilas + 1) * (iCols + 1)
  17. With ActiveSheet
  18. ‘recorremos columnas hasta que encontramos entre qué saltos verticales está.
  19. y = direccion.Column
  20. x = 0
  21. Do
  22. x = x + 1
  23. Loop Until x = iCols Or y < .VPageBreaks(x).Location.Column
  24. iCol = x
  25. If y >= .VPageBreaks(x).Location.Column Then
  26. iCol = iCol + 1
  27. End If
  28. ‘recorremos columnas hasta que encontramos entre qué saltos horizontales está.
  29. y = direccion.Row
  30. x = 0
  31. Do
  32. x = x + 1
  33. Loop Until x = lfilas Or y < .HPageBreaks(x).Location.Row
  34. lfila = x
  35. If y >= .HPageBreaks(x).Location.Row Then
  36. lfila = lfila + 1
  37. End If
  38. ‘Dirigimos y calculamos el número de pagina, según este la configuración de pagína
  39. ‘bien Hacia abajo y luego hacia la derecha
  40. ‘bien Hacia la derecha y luego abajo
  41. If .PageSetup.Order = xlDownThenOver Then
  42. iPag = (iCol – 1) * (lfilas + 1) + lfila
  43. Else
  44. iPag = (lfila – 1) * (iCols + 1) + iCol
  45. End If
  46. End With
  47. ‘devolvemos el valor a la hoja de cálculo
  48. InfoPag = iPag & " de " & iPags
  49. Set direccion = Nothing
  50. End Function

El resultado es el esperado, obtenemos en nuestras celdas la numeración de página respecto del total de páginas dentro del área de impresión.
Ojo, la función está definida bajo el supuesto que existe al menos un salto vertical y uno horizontal!!!. En caso contrario devolvería un error.
Para controlar esta situación habría que condicionar el código para el caso que .HPageBreaks.Count y.VPageBreaks.Count fueran cero…

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s