Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2023, 10:55   #1
Йевгений
Новичок
Джуниор
 
Регистрация: 18.05.2023
Сообщений: 2
По умолчанию Вставка Shape средствами VBA в определенное место страницы Word или изменение позиции Anchor у Shape

Здравствуйте!
Продублирую свое сообщение, которое разместил уже на двух других форумах.
Не могу понять, как вставлять в Shape средствами VBA в нужную ячейку таблицы. Толи нужно переносить anchor моего прямоугольника в ячейку таблицы, толи нужно устанавливать курсор в ячейку перед созданием фигуры? Не получается никак.

Пример кода:

Код:
Sub Макрос1()
    Dim docNew As Document
    Dim shpCanvas As Shape
    Dim tblNew As Table

' Создаю документ
    Set docNew = Documents.Add

' Формирую вид
    docNew.Paragraphs.Alignment = wdAlignParagraphCenter
    With docNew.PageSetup
            .Orientation = wdOrientLandscape
            .TopMargin = CentimetersToPoints(1.27)
            .BottomMargin = CentimetersToPoints(1.27)
            .LeftMargin = CentimetersToPoints(1.27)
            .RightMargin = CentimetersToPoints(1.27)
            .VerticalAlignment = wdAlignVerticalCenter
    End With

' Создаю таблицу
    Set tblNew = docNew.Tables.Add(Selection.Range, 2, 1)

' Создаю прямоугольник, пытаюсь сделать это в ячейке
    tblNew.Cell(1, 1).Range.Select
    Set shpCanvas = docNew.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 100)
'     Set shpCanvas = docNew.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 100, tblNew.Cell(1,1).Range)

' Задаю формат обтекания текстом
    shpCanvas.WrapFormat.Type = wdWrapSquare
End Sub
В итоге у меня всегда прямоугольник под таблицей, а не в ячейке. Моих куцых знаний не хватает, и на других форумах не отвечают. Может быть здесь кто-то подскажет правильное решение?

Хочу сделать так:
2023-05-17_11-40-45.png

Но получается как-то так:
2023-05-17_11-41-11.png
Йевгений вне форума Ответить с цитированием
Старый 19.05.2023, 09:31   #2
Fck_This
Пользователь
 
Регистрация: 10.11.2016
Сообщений: 11
По умолчанию

Код:
Set shpCanvas = docNew.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 100, docNew.Tables(1).cell(2, 1).Range.Paragraphs(1).Range)
Номер таблицы сами укажите, и ячейки тоже.
Fck_This вне форума Ответить с цитированием
Старый 19.05.2023, 11:30   #3
Йевгений
Новичок
Джуниор
 
Регистрация: 18.05.2023
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Fck_This Посмотреть сообщение
Код:
Set shpCanvas = docNew.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 100, docNew.Tables(1).cell(2, 1).Range.Paragraphs(1).Range)
Номер таблицы сами укажите, и ячейки тоже.
Спасибо! Но не помогло.
Мне подсказали, что проблема в версии Word.
В новых версиях мой изначальный код работает правильно.
А в старых версиях я получил нужный результат так:
1)Вырезать anchor у Shape
2)Выбрать нужную ячейку таблицы
3)Выполнить вставку

Код:
Sub Макрос1()
    Dim docNew As Document
    Dim shpCanvas As Shape
    Dim tblNew As Table
 
' Создаю документ
    Set docNew = Documents.Add
 
' Формирую вид
    docNew.Paragraphs.Alignment = wdAlignParagraphCenter
    With docNew.PageSetup
            .Orientation = wdOrientLandscape
            .TopMargin = CentimetersToPoints(1.27)
            .BottomMargin = CentimetersToPoints(1.27)
            .LeftMargin = CentimetersToPoints(1.27)
            .RightMargin = CentimetersToPoints(1.27)
            .VerticalAlignment = wdAlignVerticalCenter
    End With
 
' Создаю таблицу
    Set tblNew = docNew.Tables.Add(Selection.Range, 2, 1)
 
' Создаю прямоугольник, в новых версиях Ворда он окажется в ячейке, а в старых (2016 в моем случае) под таблицей
    tblNew.Cell(1, 1).Range.Select
    Set shpCanvas = docNew.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 100)
 
' Задаю формат обтекания текстом
    shpCanvas.WrapFormat.Type = wdWrapSquare
 
' Код, который перенесет anchor в нужную ячейку, если это не произошло автоматически в старых версиях Word
    shpCanvas.Anchor.Cut
    tblNew.Cell(1, 1).Range.Select
    Selection.Paste
End Sub
Йевгений вне форума Ответить с цитированием
Старый 29.05.2023, 09:42   #4
Fck_This
Пользователь
 
Регистрация: 10.11.2016
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Йевгений Посмотреть сообщение
Спасибо! Но не помогло.
Ну у меня 2013 ворд и всё работает.
Fck_This вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход с одной страницы на другую в определенное место Ol'ga JavaScript, Ajax 1 25.04.2016 12:09
Shape в группе. Как понять в VBA, что выделена не просто группа, но и Shape (объект на группе)? DBEER Microsoft Office Word 7 15.02.2016 10:26
Замена текста в объекте Word shape.TextFrame.TextRange.Text DolgopolovaOlga Microsoft Office Word 10 08.11.2011 14:32
C#, работа с Shape в Word Evgeniy1989 Общие вопросы .NET 0 30.07.2010 07:17
Pascal цикл с Shape.Left and Shape.Top BanzoO Помощь студентам 1 13.12.2009 21:47