A family of Microsoft word processing software products for creating web, email, and print documents.
The problem you're having stems from the order in which Word applies the various sources of attributes to determine the final formatting of a piece of text.
The order for font attributes, where each later source overrides the ones before it if there is a different value, is: Default Font, Paragraph Style, Character Style, Direct Formatting.
If a piece of text has a size applied by direct formatting, and then you apply a character style (even though the character style doesn't explicitly involve the font size), the direct formatting is removed -- you can't slip the character style in "under" the direct formatting. So the size then is determined by the paragraph style (or, if that style doesn't specify the size, then it's determined by the default font size).
You can modify the macro to get the existing font size of each matched text before applying Emphasis style, and then reapply that size afterward...
Sub x()
Dim rg As Range
Dim fSize As Single
Set rg = ActiveDocument.Range
With rg.Find
.Format = True
.Font.Italic = True
While .Execute
fSize = rg.Font.Size
rg.Style = ActiveDocument.Styles("Emphasis")
If fSize <> wdUndefined Then
rg.Font.Size = fSize
Else
rg.Select
MsgBox "mixed sizes in " & rg.Text
End If
rg.Collapse wdCollapseEnd
Wend
End With
End Sub
Note that if the range of the found text includes more than one font size, the value of rg.Font.Size will be wdUndefined (= 9999999). If necessary, in that case you could examine the range before applying Emphasis and store the size of each character in an array, to be reapplied later.