EletsAdm пишет:Нужно быть аккуратнее с ненумерованными списками: маркеры преобразуются в "кракозябры"
Немного покопался... с Watches:
Чтобы избежать - первую пару if'ов предлагаю заменить
If .ListFormat.ListString <> "" Then
MarkerReplacer = .ListFormat.ListString
Select Case .ListFormat.ListType
Case wdListPictureBullet
MarkerReplacer = "*"
Case wdListBullet
If Chr(Asc(P.Range.ListFormat.ListString)) = "?" And _
P.Range.ListFormat.ListString <> "?" Then MarkerReplacer = ">"
End Select
.Text = MarkerReplacer + " " + .Text
End If
тогда маркеры-картинки будут заменяться на "*"
маркеры-списка неформатного вида - на ">"
причем не очень понятно в каком случае .ListFormat.ListString возвращает "?", а в каком сам символ... так "-" возвращается как "-", а вот маркер "+" - уже как "?"
Chr(Asc(P.Range.ListFormat.ListString)) = "?" And P.Range.ListFormat.ListString <> "?"
это мудреное сравнение, поскольку в Immediate видим "?", а на самом деле этот символ передается другим значением - возможно Unicode?, поэтому ListFormat.ListString = "?" будет все время False, кроме случаев когда маркер сам знак вопроса...
В общем, если маркированные списки приводить к одному виду, то можно проще - см. когда .ListFormat.ListType соответствует нумерованному списку, а остальные - заменять.
А вообще-то интересно - если кто знает как выцепить марекеры, являющиеся "Символами/Character" и вбабахать их при замене - было бы интересно... Кто знает - припишите идеи.
Отредактировано VBA-addict (01.12.2010 21:29:31)
Делай, что можешь, и будь, что будет!