I experimented with Maarten's solution (see above) and found it good but for the problem that the "AutoFormat" command does silly tricks with empty paragraphs in the document - removing some of them, which is not always what you might want.
Therefore, here is an alternative solution for replacing quotation marks "style Language A" with quotation marks "style language B". It does not touch the text in other unwanted ways.
The code as it is is for swapping German with French quotation marks. You can adjust this to other pairs of languages using the respective characters
Sub ReplaceQuotmarks_DEtoFR()
'Procedure to replace German quotation marks with French ones
'Quotation marks used here are:
' German: Chr(132) Chr(147) - curvy bottom-top style
' French: Chr(171) Chr(187) - Guillements, << >>
' Chr(160) is the non-breaking space
'Definitions
Dim strFind1 As String
Dim strReplace1 As String
Dim strFind2 As String
Dim strReplace2 As String
'Fill variables with values
strFind1 = Chr(132) ' German quote start
strFind2 = Chr(147) ' German quote end
strReplace1 = Chr(171) ' Opening Guillemet
strReplace2 = Chr(187) ' Closing Guillemet
'Alternative replacement: with non-breaking space between the Word and the French quotation marks. Disable it by outcommenting if you do not want to us this.
strReplace1 = Chr(171) & Chr(160) ' Guillement & Space
strReplace2 = Chr(160) & Chr(187) ' Space and Guillemet
'Setting the language
Selection.WholeStory
Selection.LanguageID = wdFrench
'You may define other languages here, e.g. wdGeorgian, wdSpanish, etc.
'Standard replacement procedure throughout the story
Selection.Find.ClearFormatting
With Selection.Find
.text = strFind1
.Replacement.text = strReplace1
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Selection.Find.ClearFormatting
With Selection.Find
.text = strFind2
.Replacement.text = strReplace2
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End Sub