lunes, 16 de octubre de 2023

Cómo encontrar todos los enlaces rotos en una presentación de Powerpoint

Problema: Deseamos comprobar que todos los links a páginas web que tenemos en una presentación Powerpoint estén vivos, que no estén rotos, que apunten correctamente a páginas web activas.

Comentario: En Powerpoint actualmente no existe un mecanismo para verificar que todos los link (enlaces) de una transparencia funcionen correctamente. Para ello, tendremos que crear una macro con visual basic y ejecutarla.  Además, en la programación de esta macro, no existe un mecanismo que nos devuelva todos los links de toda la presentación, tenemos que ir recorriendo transparencia a transparencia.

Solución:  A continuación comparto el código que utilizo yo. 
  • La manera de utilizarlo es ir a la pestaña "vista" --> Crear, le damos el nombre "REVISAR_HIPERVINCULOS" (atención a las mayúsculas) y copiamos este código. 
  • Para ejecutarlo, puedes pulsar en el triángulo verde que tendrás en la parte superior del editor de macros.
  • Cuando lo ejecutes, se creará un fichero de texto que se llamará "BrokenLinks.txt" en tu carpeta de usuario de Windows, que se llamará algo como "C:/Users/TU_NOMBRE" (por ejemplo, si tu usuario de Windows se llama Juan --> C:/Users/Juan o C:/Usuarios/Juan). Indicará en qué página está el enlace y de qué enlace se trata
  • Si hay enlaces rotos en la parte de notas de las diapositivas, también los identificará
  • También puedes guardar la presentación como "presentación con macros" y entonces lo tendrás siempre disponible en las macros de powerpoint. 
  • Si no quieres guardarlo dentro de la presentación, guarda como presentación normal y te saldrá un mensaje de si deseas no guardar las macros, aceptas y el código no se guardará dentro de la presentación. 
  • Para los lectores interesados explico lo que hace el código después del mismo, si eso no te interesa, simplemente copia todo el código y ejecútalo pulsando sobre el triángulo verde que tendrás en la parte superior del editor de macros (visual basic for applications, VBA):


Function CheckURL(strURL As String) As Boolean
  Dim objDemand As Object
  Dim varResult As Variant

  On Error GoTo ErrorHandler
  Set objDemand = CreateObject("WinHttp.WinHttpRequest.5.1")

  With objDemand
    .Open "GET", strURL, False
    .Send
    varResult = .StatusText
  End With

  Set objDemand = Nothing

  If varResult = "OK" Then
    CheckURL = True
  Else
    CheckURL = False
  End If

ErrorHandler:
End Function

Sub REVISAR_HIPERVINCULOS()
    Dim objDoc As Presentation
    Dim objLink As Hyperlink
    Dim strLinkAddress As String
    Dim sld As Slide
    Dim fso As Object
    Dim txtFile As Object

    Set objDoc = ActivePresentation
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtFile = fso.CreateTextFile(Environ("USERPROFILE") & "\BrokenLinks.txt", True)

    txtFile.WriteLine "BROKEN LINKS" & vbCrLf
    For Each sld In ActivePresentation.Slides
        For Each objLink In sld.Hyperlinks
            strLinkAddress = objLink.Address
            If Not CheckURL(strLinkAddress) Then
                txtFile.WriteLine "Link KO. Slide: " & sld.SlideIndex & " Link: " & strLinkAddress & vbCrLf
            End If
            DoEvents
        Next objLink
    Next sld

    txtFile.Close
    Set txtFile = Nothing
    Set fso = Nothing
End Sub



Aquí está el análisis del código, seguro que se puede mejorar y optimizar, pero os funcionará bien:

Function CheckURL(strURL As String) As Boolean:
  • Objetivo: Verificar si una URL dada es accesible o no.
  • Cómo funciona:
    • Se crea un objeto de solicitud HTTP (WinHttp.WinHttpRequest.5.1).
    • Intenta acceder a la URL (strURL) usando el método "GET".
    • Si la solicitud es exitosa, la función devuelve True si el estado es "OK". De lo contrario, devuelve False.
  • Errores: Si ocurre algún error durante la solicitud HTTP, la función devolverá False por defecto (porque las variables Boolean no inicializadas en VBA tienen un valor predeterminado de False).
Sub REVISAR_HIPERVINCULOS():
  • Objetivo: Revisar todos los hipervínculos en la presentación PowerPoint activa y registrar los que estén rotos en un archivo de texto.
  • Cómo funciona:
    • Primero, inicializa un objeto ActivePresentation, un FileSystemObject y un archivo de texto (BrokenLinks.txt) ubicado en el directorio del perfil del usuario.
    • La subrutina escribe "BROKEN LINKS" como encabezado en el archivo de texto.
    • Luego recorre cada diapositiva en la presentación activa.
    • Para cada diapositiva, verifica cada hipervínculo en la diapositiva usando la función CheckURL.
    • Si un hipervínculo no es válido (es decir, la función CheckURL devuelve False), se escribe información sobre ese hipervínculo roto en el archivo de texto, indicando el número de diapositiva y la dirección del hipervínculo.
    • Después de revisar todos los hipervínculos, cierra el archivo de texto y libera los objetos utilizados.
Si encontraste una solución a tu problema y ahorraste tiempo, ya me doy por satisfecho. También podrías invitarme a un café con una pequeña donación en Paypal. ¡Gracias! 


No hay comentarios:

Publicar un comentario