1

Тема: Изменение текста WordArt в колонтитулах

Каким образом обратиться к объекту WordArt, для изменения его текста, находящемуся в колонтитулах?
Особенность в том, что объект WordArt вставлен в автофигуру.

С уважением

2

Re: Изменение текста WordArt в колонтитулах

У меня вот такое получилось с нарисованными самим автофигурой и объектом Wordart в нем:

  
    Selection.HeaderFooter.Shapes(1).Select
    Selection.InlineShapes(1).TextEffect.Text = "тут изменененный текст"

Как я понимаю, для вас важно именно это?.
Приведенным кодом осуществляется выбор первой автофигуры (можно вместо цифры ее имя в кавычках) и изменение текста объекта WordArt (TextEffect.Text).
Так как сам еще не умею выбирать автофигуры, могу только такой вариант предложить.
Вполне вероятно, что в последнюю строку тоже нужно будет вносить изменение.. Но с тем, что я нарисовал, это работает!!!!

Вот что еще нашел в инете по этому поводу:

Обычно вы ссылаетесь на элемент управления в документе по его кодовому имени - так же, как если бы этот элемент управления находился на форме. Однако в документах Word существует еще одна возможность доступа к элементам управления - через коллекции InlineShapes и Shapes. Элемент управления, помещенный в текстовый слой, содержится в объекте InlineShape, а элемент управления из слоя рисования - в объекте Shapes.

3

Re: Изменение текста WordArt в колонтитулах

Чувствую, не получится толком объяснить у меня. Может, Вождь поправит. Просто приведу пример изменения текста WordArt, расположенного в надписи в верхнем колонтитуле первого раздела активного документа:

ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).TextFrame.TextRange.InlineShapes(1).TextEffect.Text="Новый текст"

Конечно, на полноценный код это не тянет. Если известно, только то, что где-то в колонтитуле расположен текст WordArt, который нужно изменить, то нужно перебрать все объекты Shapes в соответствующем колонтитуле, проверить какой из них имеет внутри текст. Если текст есть, то нужно проверять коллекцию InlineShapes на наличие в ней объекта типа WordArt. И только найдя этот объект WordArt, изменять в нём текст.

Лучше день потерять — потом за пять минут долететь!

4

Re: Изменение текста WordArt в колонтитулах

andrkar, Этот вариант я использовал. Для этого необходимо переводить документ в режим редактирования колонтитулов, а этого хотелось бы избежать. Но все равно спасибо.

viter.alex, да спасибо, код срабатывает. А если усложнить задачу до сгруппированных автофигур?
Для примера прилагаю файл.

Post's attachments

WordArt.docx 20.92 Кб, 6 скачиваний с 2010-03-26 

You don't have the permssions to download the attachments of this post.

5

Re: Изменение текста WordArt в колонтитулах

Только как пример:

Sub test()
  Dim osh As Shape
  Dim oShGr As Shape
  Dim oInSh As InlineShape
  For Each osh In ActiveDocument.Sections.First.Headers(wdHeaderFooterPrimary).Shapes
    If osh.GroupItems.Count <> 0 Then
      For Each oShGr In osh.GroupItems
        If oShGr.TextFrame.HasText Then
          For Each oInSh In oShGr.TextFrame.TextRange.InlineShapes
            oInSh.TextEffect.Text = "Новый текст"
          Next
        End If
      Next
    End If
  Next
End Sub

Перебираем все фигуры в колонтитуле. Если есть сгрупированные, то перебираем сгрупированные. Если в сгруппированной фигуре есть текст, то ищем объект WordArt и меняем в нём текст.

Кстати, в справке по свойству TextEffect какая-то путаница со свойством Type для InlineShape:

Справка Word пишет:

InlineShape.TextEffect Property
Returns a TextEffectFormat object that contains text-effect formatting properties for the specified inline shape. Read-only.
Syntax

expression.TextEffect

expression   A variable that represents an InlineShape object.

Example


This example sets the font style to bold for shape three on myDocument if the shape is WordArt.

Visual Basic for Applications

Set myDocument = ActiveDocument
With myDocument.Shapes(3)
    If .Type = msoTextEffect Then
        .TextEffect.FontBold = True
    End If
End With 

Обратите внимание, что я выделил красным и для какого объекта приведён код. У InlineShape свойство Type принимает значения из перечисления WdInlineShapeType, а там нет значения msoTextEffect

Лучше день потерять — потом за пять минут долететь!

6

Re: Изменение текста WordArt в колонтитулах

viter.alex, большое спасибо. Код вполне отвечает конкретному примеру. Что касается справки по VBA, то никогда не читал ее с особой скурпулезностью. Что касается приведенного Вами образца справки, то мне кажется, что в данном случае TextEffect Property ни как не связано с msoTextEffect. Перефразировав этот пример с использованием InlineShape мы можем поставить в условие любое другое выражение, например то же WdInlineShapeType.

7

Re: Изменение текста WordArt в колонтитулах

Нет, дело не в том. Ведь в примере сначала проверятся, что объект является WordArt и только потом изменяется его текст

Лучше день потерять — потом за пять минут долететь!

8

Re: Изменение текста WordArt в колонтитулах

Прошу прощения, я говорил про справку VBA, которую вы выложили после кода примера и про пример в этой справке, а там меняется не текст а шрифт. Я думаю, что можно в этом примере спокойно заменить Shapes на InlineShapes и условие проверки выбрать соответствующее.
К стати, при проверке тип объекта WordArt выдает равный 3, что соответствует wdInlineShapePicture

9

Re: Изменение текста WordArt в колонтитулах

mikkelle пишет:

…К стати, при проверке тип объекта WordArt выдает равный 3, что соответствует wdInlineShapePicture

Что не есть верно. Если вставиь картинку, то она тоже будет того же типа, но TextEffect для неё не будет работать

Лучше день потерять — потом за пять минут долететь!

10

Re: Изменение текста WordArt в колонтитулах

Да, здесь вы правы. Остается только непосредственно в компанию обращаться.
К стати, по ходу подскажите, какие вообще есть функции для проверки положения курсора в конце документа.

11

Re: Изменение текста WordArt в колонтитулах

mikkelle пишет:

К стати, по ходу подскажите, какие вообще есть функции для проверки положения курсора в конце документа.

Не подскажу. Оформите этот вопрос отдельной темой.
Это не из-за вредности, а для облегчения поиска.

Лучше день потерять — потом за пять минут долететь!

12

Re: Изменение текста WordArt в колонтитулах

Я попытаюсь написать подробнее о работе с графическими объектами, а пока ограничусь фрагментом со страницы
внешняя ссылка
(я перевел вступительную фразу и комментарий в тексте программы)

Helmut Weber <nbhymsjxdgcn[ at ]mailinator.com>:

Я не могу найти другой способ проверить,
является ли встроенная в текст фигура картинкой WordArt,
кроме следующего:

Sub Test48800()
  Dim oShpNrm As Shape ' обычная фигура
  Dim oShpInl As InlineShape
  Dim strTemp As String
  For Each oShpNrm In ActiveDocument.Shapes
    If oShpNrm.Type = msoTextEffect Then
      oShpNrm.Select
      MsgBox "WordArt Shape"
    End If
  Next
  For Each oShpInl In ActiveDocument.InlineShapes
    If oShpInl.Type = wdInlineShapePicture Then
      oShpInl.Select
      On Error Resume Next
      strTemp = ""
      strTemp = oShpInl.TextEffect.Text
      If strTemp <> "" Then
        MsgBox "WordArt Inlineshape"
      End If
    End If
  Next
End Sub

With shapes it is easy.

--
Greetings from Bavaria, Germany

Helmut Weber, MVP WordVBA

Win XP, Office 2003
"red.sys" & Chr$(64) & "t-online.de"

13

Re: Изменение текста WordArt в колонтитулах

Спасибо, Марк. Этот способ напрашивался сам собой. Ждём пояснений по поводу графических объектов.

Лучше день потерять — потом за пять минут долететь!

14

Re: Изменение текста WordArt в колонтитулах

На странице внешняя ссылка я выложил небольшую статью
Обработка графики в Microsoft Word средствами VBA, содержащей предварительные сведения об объектах Shape и InlineShape и набор учебных макросов с подробным описанием, демонстрирующих перебор графических объектов в документе Microsoft Word. 
В прилагаемом файле GraphProc.rar  сжат документ
GraphProc02.doc (465 408 байт) с текстом этой страницы и VBA-модулями с описанными на ней макросами.

Отредактировано Марк (01.04.2010 22:15:51)

Post's attachments

GraphProc.rar 128.47 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

15

Re: Изменение текста WordArt в колонтитулах

В качестве практического примера обработки графических объектов в Microsoft Word предлагаю шаблон EachShape.
На странице внешняя ссылка можно скачать последнюю версию шаблона.
Запустите макрос EachShape. Он поочередно выделяет все графические объекты в активном документе и выводит информацию о каждом из них.
Шаблон не защищен, его можно бесплатно использовать для любых целей. Единственная просьба — ссылаться на страницу внешняя ссылка и указывать автора шаблона.
Прошу прощения за то, что интерфейс пользователя на английском языке — используется терминология из нелокализованной справки VBA.

Отредактировано Марк (30.03.2010 10:05:05)

16

Re: Изменение текста WordArt в колонтитулах

Марк, большое спасибо и за помощь и за статью.

17

Re: Изменение текста WordArt в колонтитулах

На странице внешняя ссылка я дописал статью
Обработка графики в Microsoft Word средствами VBA, включив в нее описание кода программы EachShape