Предположим, что у меня есть a Range
ссылка в Word VBA, и я хочу разломать это на меньшие диапазоны, где форматирование (шрифт, цвет, и т.д.) идентично. Например, если я запускаю с:
Быстрая коричневая лиса перепрыгнула через лентяя.
... затем я хотел бы возвратить 5 диапазонов, следующим образом:
быстрый
обжарьте лису, через которую перепрыгивают
ленивый
собака.
Я надеялся, что был встроенный способ сделать это в VBA (и даже иметь фантомную память использования такого средства), но я ничего не могу найти.
Я мог сделать то, что я должен сделать в коде, но что-то, что работает исходно, было бы намного (намного) более быстрым.
[В коде я использовал бы факт это - например - oRange.Font.Bold
возвратится "неопределенный", если диапазон будет содержать соединение полужирного цвета и не полужирный, и таким образом, я мог использовать это неоднократно для обнаружения степени универсальных диапазонов. Но я вполне уверен, что Word будет делать это под капотом, поэтому если бы кто-то может вытолкать тот капот для меня, я был бы благодарен.]
Править: удаленный более сложный пример, который не любил рендерер StackOverflow HTML.
На самом деле это невозможно сделать в VBA, поскольку OM не поддерживает запуски (однако OOXML поддерживает). Лучшее, что вы могли бы сделать, это получить wdUnits из wdCharacterFormatting и создать цикл для создания диапазонов, извлечения их свойств и последующего уничтожения их до завершения цикла. Вы, вероятно, начнете с чего-то вроде:
Dim sel As Selection
Set sel = ActiveWindow.Selection
Dim selRange As Range
Set selRange = selRange.Next(wdCharacterFormatting)
, чтобы получить начало и конец следующего набора форматирования, например selRange.Start / selRange.End, а также любых свойств, таких как selRange.Font.Name/selRange.Bold.