Я не могу точно понять, что именно вы пытаетесь сделать там, но Selection.TypeText
свернет выделение до точки вставки, поэтому у вас фактически не будет выбранных символов к тому времени, когда вы попытаетесь "отменить шрифт". Вам необходимо либо повторно выделить текст, либо использовать объект Range
вместо выделения, чтобы определить текст, на который нужно повлиять.
Причина, по которой вы получаете сообщение об ошибке:
Set Selection.Font = oldFont
... потому что - необычно и извращенно - вы не должны использовать ключевое слово Set
при присваивании свойству Font
. Вместо сохранения ссылки на объект Font
, присваивание просто применяет свойства назначенного шрифта.
Это очень запутанный дизайн API, еще более запутанный, потому что вам нужно нужно использовать ключевое слово Set
, когда читает свойство Font
, и потому что назначает ссылку на объект Font
!
И это еще одна причина, по которой ваш код не будет работать - вы берете ссылку на Font
объект, который затем модифицируете, а ваша ссылка указывает на тот же Font
объект, который теперь изменился.
Что вам действительно нужно сделать, это создать новый Font
объект для хранения оригинальных деталей шрифта, как показано ниже:
Set oldFont = Selection.Font.Duplicate