Demasiado grande para um comentário (o que deve ser porque isto não é bem testado e pode não fazer o que você quer).
Se a AutoFormatação não fizer o suficiente (conforme nossa conversa em Comentários), acho que você precisará fazer uma quantia justa para cada hiperlink, ou seja,
- garantir que ele tenha sido reconhecido como um hiperlink pelo Word (nesse caso
você deve conseguir ver um código de campo {HYPERLINK} se usar
Alt-F9)
- aplica o estilo de caractere de hiperlink ao resultado do HYPERLINK
campo
- reaplique a formatação de caracteres ao resultado do campo HYPERLINK para corrigir
o dano que a imposição do estilo Hyperlink pode fazer
Se o texto importado contiver um número de hiperlinks, fazer tudo isso provavelmente será bastante entediante, portanto, a parte a seguir do VBA tem como objetivo corrigir os hiperlinks no corpo do documento do Word atualmente ativo.
Ele só detecta coisas que o Word acha que são hiperlinks (não necessariamente tudo que você espera).
Sugiro que, se possível, você abra qualquer texto importado como documento separado na primeira instância e execute este código. Isso deve minimizar os efeitos colaterais indesejáveis.
A coisa sobre o estilo de caractere de hiperlink é que ele aplica a "Fonte de parágrafo padrão", que pode não ter as mesmas propriedades (por exemplo, tamanho etc.) do texto existente. Mesmo se você modificar o estilo para usar "Propriedades subjacentes", pode alterar o tamanho do texto e assim por diante. Então, o que eu fiz aqui é olhar as propriedades do primeiro caractere no "texto de exibição" do Hyperlink e reaplicá-lo ao texto de exibição inteiro depois de aplicar o estilo Hyperlink.
Mas se você estiver aplicando seus próprios estilos de parágrafo ao texto importado, é mais provável que o estilo de texto com o estilo Hyperlink faça o que você deseja de qualquer maneira, então você pode remover esse bit de VBA.
Se você precisar procurar hiperlinks em outras "histórias" no documento, como caixas de texto, cabeçalhos / rodapés, etc., você definitivamente precisará de mais.
Private Type AutoFormatOptions
bAutoFormatApplyBulletedLists As Boolean
bAutoFormatApplyFirstIndents As Boolean
bAutoFormatApplyHeadings As Boolean
bAutoFormatApplyLists As Boolean
bAutoFormatApplyOtherParas As Boolean
bAutoFormatDeleteAutoSpaces As Boolean
bAutoFormatMatchParentheses As Boolean
bAutoFormatPlainTextWordMail As Boolean
bAutoFormatPreserveStyles As Boolean
bAutoFormatReplaceFarEastDashes As Boolean
bAutoFormatReplaceFractions As Boolean
bAutoFormatReplaceHyperlinks As Boolean
bAutoFormatReplaceOrdinals As Boolean
bAutoFormatReplacePlainTextEmphasis As Boolean
bAutoFormatReplaceQuotes As Boolean
bAutoFormatReplaceSymbols As Boolean
End Type
Sub fixUpHyperlinks()
Dim afo As AutoFormatOptions
Dim f As Word.Font
Dim h As Word.Hyperlink
' Save existing autoformat options
With Application.Options
afo.bAutoFormatApplyBulletedLists = .AutoFormatApplyBulletedLists
afo.bAutoFormatApplyFirstIndents = .AutoFormatApplyFirstIndents
afo.bAutoFormatApplyHeadings = .AutoFormatApplyHeadings
afo.bAutoFormatApplyLists = .AutoFormatApplyLists
afo.bAutoFormatApplyOtherParas = .AutoFormatApplyOtherParas
afo.bAutoFormatDeleteAutoSpaces = .AutoFormatDeleteAutoSpaces
afo.bAutoFormatMatchParentheses = .AutoFormatMatchParentheses
afo.bAutoFormatPlainTextWordMail = .AutoFormatPlainTextWordMail
afo.bAutoFormatPreserveStyles = .AutoFormatPreserveStyles
afo.bAutoFormatReplaceFarEastDashes = .AutoFormatReplaceFarEastDashes
afo.bAutoFormatReplaceFractions = .AutoFormatReplaceFractions
afo.bAutoFormatReplaceHyperlinks = .AutoFormatReplaceHyperlinks
afo.bAutoFormatReplaceOrdinals = .AutoFormatReplaceOrdinals
afo.bAutoFormatReplacePlainTextEmphasis = .AutoFormatReplacePlainTextEmphasis
afo.bAutoFormatReplaceQuotes = .AutoFormatReplaceQuotes
afo.bAutoFormatReplaceSymbols = .AutoFormatReplaceSymbols
End With
On Error GoTo cleanup
' set everything the way we want
With Application.Options
' all false
.AutoFormatApplyBulletedLists = False
.AutoFormatApplyFirstIndents = False
.AutoFormatApplyHeadings = False
.AutoFormatApplyLists = False
.AutoFormatApplyOtherParas = False
.AutoFormatDeleteAutoSpaces = False
.AutoFormatMatchParentheses = False
.AutoFormatPlainTextWordMail = False
.AutoFormatPreserveStyles = False
.AutoFormatReplaceFarEastDashes = False
.AutoFormatReplaceFractions = False
' except this one
.AutoFormatReplaceHyperlinks = True
.AutoFormatReplaceOrdinals = False
.AutoFormatReplacePlainTextEmphasis = False
.AutoFormatReplaceQuotes = False
.AutoFormatReplaceSymbols = False
End With
With ActiveDocument
' Apply the selected formats
.Kind = wdDocumentNotSpecified
.Content.AutoFormat
' Now apply the Hyperlink style to all Hyperlink field result ranges
For Each h In .Hyperlinks
With .Range.Fields(1).Result
If .Characters.Count >= 1 Then
' Remove the following line if the Hyperlink style works for you
Set f = .Characters(1).Font.Duplicate
' Apply the Hyperlink style
.Style = ActiveDocument.Styles(wdStyleHyperlink).NameLocal
' Remove the following 2 lines if the Hyperlink style works for you
Set .Font = f
set f = Nothing
End If
End With
Next
End With
cleanup:
' restore the original settings
With Application.Options
.AutoFormatApplyBulletedLists = afo.bAutoFormatApplyBulletedLists
.AutoFormatApplyFirstIndents = afo.bAutoFormatApplyFirstIndents
.AutoFormatApplyHeadings = afo.bAutoFormatApplyHeadings
.AutoFormatApplyLists = afo.bAutoFormatApplyLists
.AutoFormatApplyOtherParas = afo.bAutoFormatApplyOtherParas
.AutoFormatDeleteAutoSpaces = afo.bAutoFormatDeleteAutoSpaces
.AutoFormatMatchParentheses = afo.bAutoFormatMatchParentheses
.AutoFormatPlainTextWordMail = afo.bAutoFormatPlainTextWordMail
.AutoFormatPreserveStyles = afo.bAutoFormatPreserveStyles
.AutoFormatReplaceFarEastDashes = afo.bAutoFormatReplaceFarEastDashes
.AutoFormatReplaceFractions = afo.bAutoFormatReplaceFractions
.AutoFormatReplaceHyperlinks = afo.bAutoFormatReplaceHyperlinks
.AutoFormatReplaceOrdinals = afo.bAutoFormatReplaceOrdinals
.AutoFormatReplacePlainTextEmphasis = afo.bAutoFormatReplacePlainTextEmphasis
.AutoFormatReplaceQuotes = afo.bAutoFormatReplaceQuotes
.AutoFormatReplaceSymbols = afo.bAutoFormatReplaceSymbols
End With
' Application.Options.AutoFormatApplyBulletedLists
' Selection.Document.Kind = wdDocumentNotSpecified
' Selection.Range.AutoFormat
End Sub