Corel X6 VBA Верхний индекс (макрос)

  • Автор темы Автор темы Devust
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Devust

Участник
Топикстартер
Сообщения
14
Реакции
0
Доброго времени суток!

Есть вопрос - никак решить не могу.
В общем, нужно часть текста перевести в верхний индекс.

Ну какая-то банальщина, а не работает.

Автоматическая запись макросов, блин, не работает:

Sub Macro4()
' Recorded 11.01.2016
Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
' Recording of this command is not supported: TextUndoRedo
End Sub

Это всё, что корел автоматом записал.

Делаю так:


Dim s As Shape
Dim d As Document

Set d = ActiveDocument

For Each s In d.ActivePage.FindShapes(, cdrTextShape)

s.Text.Range(3, 4).Position = cdrSuperscriptFontPosition

Next s

Не работает. Пишет ошибку:

Run-time error '-2147024809 (80070057)':
Значение вне диапазона. Оно должно быть в диапазоне от 0 до 1

Почему-то здесь может быть только cdrNormalFontPosition или cdrSubscriptFontPosition
т.е. нормальное положение и нижний индекс. А верхний?

Есть ещё такой вариант:
s.FontPropertiesInRange(3, 4).Position = cdrSuperscriptFontPosition
тоже не прокатывает

На просторах интернета есть ещё какие-то варианты, но ничего не работает.
Вопрос: как перевести в верхний индекс?

И ещё, почему элементарные действия сам корел в макрос не записывает.
Там вообще много чего корел не записывает - может отключено что?
 
Dim s As Shape
Dim d As Document

Set d = ActiveDocument

For Each s In d.ActivePage.FindShapes(, cdrTextShape)

s.Text.Range(3, 4).Position = cdrSuperscriptFontPosition

Next s
Вы уверены что вам во всех текстовых блоках именно четвертый слева символ надо в суперскрипт перевести? 'hmmm'
 
  • Спасибо
Реакции: Devust
да да. именно.
Но, по-моему я уже нашёл вариант:
s.Text.FontPropertiesInRange(v + 1, Len(plast(p, 3))).Position = cdrSuperscriptFontPosition
Это сработало! Вторую неделю поиска принесли результат!!!
Но, всё-равно спасибо )))
 
Но вот вопрос - почему корел не записывает подобные действия в макросы - пока не выяснил.
Это действительно так у разработчиков, или в настройках что-то не указано, или не доставлено что?
 
На самом деле, как я понимаю, вся проблема была в том, что вы неправильно символьный диапазон устанавливали. А так бы и вариант


Dim s As Shape
Dim d As Document

Set d = ActiveDocument

For Each s In d.ActivePage.FindShapes(, cdrTextShape)

s.Text.Range(v + 1, Len(plast(p, 3))).Position = cdrSuperscriptFontPosition

Next s

работал бы.
Насколько я понимаю, корел вообще текстовые операции особо не скриптует - это ж не верстальная программа.
 
  • Спасибо
Реакции: Devust
а, нет. Попробовал - ошибка вышла. Та же.
Run-time error '-2147024809 (80070057)':
Значение вне диапазона. Оно должно быть в диапазоне от 0 до 1
 
Э, в смысле ошибка здесь:
s.Text.Range(v + 1, Len(plast(p, 3))).Position = cdrSuperscriptFontPosition

А так работает:
s.Text.FontPropertiesInRange(v + 1, Len(plast(p, 3))).Position = cdrSuperscriptFontPosition

Хотя та же строчка, но
s.Text.Range(v + 1, Len(plast(p, 3))).Position = cdrSubscriptFontPosition
работает.

Хм, странный корел. ))
 
Гм, только сейчас заметил, что Text.Range в X3 и X6 по разному работают 'hmmm'
 
В X3 Range(3,4) означает четвертый символ слева
А в X6 ошибку генерирует 'hz'
 
  • Спасибо
Реакции: Devust
да, только и остаётся, что пожать плечами. ))
Спасибо за поддержку!
 
Сейчас погонял всякие варианты - похоже на то, что в X6 почему то TextRange.Position перестал поддерживать значения, отличные от cdrNormalFontPosition и cdrSubscriptFontPosition, хотя в документации ничего об этом не сказано. Воистину, неисповедимы пути кореловских индусов! 'fp'
 
Статус
Закрыто для дальнейших ответов.