visual para office microsoft ejemplos vba ms-word ms-office word-vba

vba - para - Enlaces autoactuables



vba word object model (6)

necesita eliminar la línea, el enlace cambiará una vez seguido y volverá a cambiar una vez que el documento se vuelva a abrir.

Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed

¿Hay alguna manera de aplicar el estilo "autoactualizable" para el hipervínculo?

Creo que esta pregunta no es trivial.

Cuando normalmente haces clic en hipervínculo, cambiará su color a violeta. Luego, si guarda, cierra y luego vuelve a abrir el documento, el enlace se actualizará de nuevo a azul. Este es el comportamiento predeterminado de Word, y no es necesario usar ninguna macro para ello.

Estoy tratando de replicar este comportamiento con VBA. Aquí está el código:

Sub Test1() Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed End Sub

Para que funcione, simplemente ingrese el cursor en el vínculo, ejecute macro y vea los resultados:

Esto funciona bien, excepto que los enlaces visitados no se actualizarán automáticamente después de guardar, cerrar y volver a abrir el documento. Vea la diferencia en la imagen a continuación. El enlace "Google" se abrió normalmente, con el mouse Ctrl-clic; el enlace "StackOverflow" se abrió utilizando la macro:

Como ya dije, quiero que mis enlaces abiertos a VBA (StackOverflow) sean auto-actualizables también (como Google).

Sí, entiendo, hay una solución: simplemente cree otra macro, que se iniciará cada vez que se abra el documento y cambie todos los hipervínculos violetas a azul. Sin embargo, esto es solo una solución, y no me gusta. Utilizándolo, utilizamos la conversión de "violeta permanente" a "azul permanente", en lugar de usar "violeta temporal" (es decir, autoactualizable sin ningún esfuerzo adicional).

Espero que todo esté claro. Gracias por adelantado.

Actualización (se agregó después de que ya se publicaron varias respuestas).

Sí, entiendo, esto funcionará:

Sub Test1() On Error Resume Next ''To avoid an error in case if the link isn''t reachable Selection.Hyperlinks(1).Follow End Sub

Pero quiero simular lo siguiente, sin realmente abrir el enlace en el navegador. Es por eso que no puedo usar Selection.Hyperlinks(1).Follow .


No necesita cambiar el estilo con el código para hacer que el enlace sea violeta. Solo usa el método Follow . Esto hará clic en el enlace y lo volverá morado y luego se restablecerá en azul al abrir el documento nuevamente.

Sub Test1() Selection.Range.Hyperlinks(1).Follow End Sub


esto lo hace por mi

Sub resetHyperlinks() Dim hLink As Hyperlink For Each hLink In ActiveDocument.Hyperlinks hLink.Address = hLink.Address '' this works '' hLink.ScreenTip = hLink.ScreenTip '' this works also Next hLink End Sub


Puede restablecer los estilos de enlace con el código VBA que se ejecuta al inicio, es decir, forma parte de Document_Open() rutina Document_Open() en el ThisDocument VBA .

La clase Hyperlink no tiene ninguna propiedad .Visited ni nada relevante (es decir, ni siquiera se puede ver si se visitó), por lo que no hay otra .Follow() aparte de .Follow() que también abre el enlace como debería.

  • Básicamente, intenta falsificar la información que proporciona el documento sobre su estado: hacer que un enlace aparezca visitado cuando en realidad no lo era.
  • El hecho de que la clase ni siquiera proporcione una propiedad significa que los diseñadores de Word no consideran el estado visitado como parte de la funcionalidad del editor (es decir, que efectivamente no existe en lo que respecta al trabajo del programa).

Esta evidencia sugiere que Word no tiene, y no está diseñado para, tener ningún .Follow() especializado para cambiar el estado del enlace que no sea .Follow() . Lo que significa que cualquier forma que encuentres que tenga el efecto deseado será lo que estás llamando una "solución alternativa".


El color "temporal" de un hipervínculo seguido es una característica incorporada (y no directamente accesible) del estilo de carácter de hipervínculo incorporado. No está expuesto a través de las herramientas de estilo de UI normales, ni a través del modelo de objetos.

Puede comparar fácilmente todo el formato entre dos selecciones utilizando el panel Revelar formato (Shift + F1) en la ventana del documento en Word.

Si compara un hipervínculo seguido normalmente con un hipervínculo afectado por su fragmento, verá que el hipervínculo seguido sigue teniendo el estilo de hipervínculo , mientras que su seguimiento simulado ha cambiado el estilo del segundo hipervínculo.

Si compara un hipervínculo nunca seguido y un hipervínculo seguido normalmente, Word identifica su formato exactamente igual. Word no reconoce que haya cambiado ningún aspecto del formato (estilo, color de fuente, etc.).

Parece probable que el Word.WdBuiltinStyle.wdStyleHyperlinkFollowed que está utilizando exista explícitamente para abordar este vacío (lo cual es algo decepcionante).

Recomiendo usar su enfoque existente y luego revertir el estilo en un procedimiento desencadenado por los eventos Before Save y Before Close del documento. El uso de esos eventos evitará que se guarde el estilo seguido, y así evitará los problemas causados ​​por alguien que abre el documento sin habilitar las macros.


Option Explicit Sub test() Dim HL As Hyperlink For Each HL In Sheet1.Hyperlinks HL.Range.Style.Font.Color = vbBlue Next End Sub

¿No puedes simplemente ponerle el color que quieras sin invocarlo? Como otros lo han expresado anteriormente, sea lo que sea que usted piense, será una solución, ya que no es una función prevista.