VBA (Word): рисовать текстовое поле с TextEffect msoTextEffectShapeArchUpCurve - PullRequest
1 голос
/ 22 марта 2019

Резюме:

Используя Visual Basic для приложений (VBA), я пытаюсь нарисовать текстовое поле и применить к нему TextEffect msoTextEffectShapeArchUpCurve.

Это прекрасно работает при рисовании на листе Excel, но не будет работать в документе Word (хотя это можно сделать таким же образом с помощью графического интерфейса).

Итак, у меня есть файл Excel, из которого запускается скрипт. Этот скрипт создает новый документ Word и рисует внутри него фигуры.

Пример:

    Dim objWord
    Dim objDoc
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Add
    objDoc.Activate

    With ActiveDocument.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, _
        50, _
        50, _
        200, _
        200 _
    )
        .TextFrame.TextRange.text = "Some text to curve"
        .TextEffect.PresetShape = msoTextEffectShapeArchUpCurve '<-- error
    End With

Проблема:

Код дает Error 4652: Invalid type of drawing object for this command. Согласно документации это должно работать. (И это можно сделать с помощью графического интерфейса, хотя при записи действий в макросе код не создается).

Я что-то не так делаю? И как я могу это исправить?

Скриншот того, как это должно выглядеть (слева) и как это делается в графическом интерфейсе (справа):

enter image description here

Примечание. Использование AddTextEffect вместо AddTextbox на самом деле не вариант, поскольку текст WordArt искажается по сравнению с текстовым полем с выбранным эффектом.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы используете позднее связывание (с CreateObject), поэтому Excel не знает, что такое msoTextEffectShapeArchUpCurve.

Это константа, значение, поэтому вы можете просто заменить его на 9.

0 голосов
/ 25 марта 2019

К сожалению, до сих пор остается загадкой , почему Word не позволяет VBA устанавливать этот текстовый эффект на текстовые поля, в то время как с другой стороны разрешает его в графическом интерфейсе.(Любая помощь или информация по этому вопросу все равно будет принята с благодарностью!)

Однако, есть работа вокруг , которая сработала для меня:

  1. Создайте текстовое поле в документе Excel и примените к нему текстовый эффект (используя код из моего примера).

  2. Затем позвольте VBA вырезать и вставить фигуру в новый документ Word.

...