Za duży na komentarz (co powinno być, ponieważ nie jest dobrze przetestowany i może nie robić tego, co chcesz).
Jeśli Autoformatowanie nie robi wystarczająco dużo (zgodnie z naszą rozmową w komentarzach), myślę, że będziesz musiał zrobić sporo do każdego hiperłącza, tj.
- upewnij się, że został rozpoznany jako hiperlink przez program Word (w takim przypadku powinieneś zobaczyć kod pola {HYPERLINK}, jeśli używasz Alt-F9)
- zastosuj styl znaku Hiperłącze do wyniku pola HYPERLINK
- ponownie zastosuj formatowanie znaków do wyniku pola HYPERLINK, aby naprawić szkody, które może wyrządzić styl hiperłącza
Jeśli zaimportowany tekst zawiera wiele hiperłączy, wykonanie tego wszystkiego będzie prawdopodobnie dość nużące, dlatego następujący fragment VBA ma na celu naprawienie hiperłączy w treści aktualnie aktywnego dokumentu Word.
Wykryje tylko rzeczy, które Word uważa za hiperłącza (niekoniecznie wszystko, czego oczekujesz).
Sugerowałbym, aby w miarę możliwości najpierw otworzyć zaimportowane teksty jako osobne dokumenty, a następnie uruchomić ten kod. To powinno zminimalizować niepożądane skutki uboczne.
Cechą stylu znaków Hiperłącza jest to, że stosuje on „Domyślną czcionkę akapitu”, która może nie mieć takich samych właściwości (np. Rozmiar itp.) Jak istniejący tekst. Nawet jeśli zmodyfikujesz styl, aby użyć „Podstawowych właściwości”, może on zmienić rozmiar tekstu i tak dalej. Więc zrobiłem tutaj, aby spojrzeć na właściwości pierwszego znaku w „tekście wyświetlanym” hiperłącza i ponownie zastosować go do całego wyświetlanego tekstu po zastosowaniu stylu hiperłącza.
Ale jeśli stosujesz własne style akapitowe do importowanego tekstu, bardziej prawdopodobne jest, że tekst stylem Hiperłącze i tak zrobi, co chcesz, więc możesz być w stanie usunąć ten kawałek VBA.
Jeśli potrzebujesz szukać hiperłączy w innych „historiach” w dokumencie, takich jak pola tekstowe, nagłówki / stopki itp., Na pewno będziesz potrzebować więcej.
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