Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Как можно кодом VBA найти в вордовском документе рисунки и их координаты ?

Автор YKR, 19.04.2022, 10:55:59

« назад - далее »

YKR

Как можно кодом VBA найти в вордовском документе рисунки и их координаты ?

И как их можно после найденных координат программно двигать ? (влево, вправо, вверх, вниз).
Устанавливая при этом свойство, нахождения рисунка перед текстом.

Дмитрий Щербаков(The_Prist)

Третья тема и все вопросы чуть ли не по комплексным задачам, но без единой попытки с Вашей стороны эти задачи решить.
Думаю, Вам надо начать хоть что-то делать, а уже если не будет получаться - обращаться с кокнретным вопросом что не получается. Иначе выглядит, что Вы хотите чужими руками какое-то платное ТЗ выполнить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

YKR

Дмитрий Щербаков(The_Prist), Добрый день!  Спасибо  Вам за помощь и ответы.
Конечно самостоятельные попытки решить задачу были и есть  фрагменты кода. Просто решил получить независимые подходы и не путать всех своим кодом, а спросил  про идеи  и  объекты и методы VBA,
которые помогут решить эти задачи.
Задачи разбил на части ибо полная постановка тем более не найдет отклик у участников форума.
На этом и других форумах искал подобные задачи или их фрагменты,  на авторов которых ниже  есть ссылки.
И если задача тянет на коммерческую, как вы это заметили, то мы и это можем обсудить по почте без проблем. 

Идея, которая мною рассматривалась была следующая -  использовались  в тексте скрытые символы,  например "(|" или "!|"  и другие.  Что вообще-то далеко не всегда неудобно.
Эти скрытые символы,  размещались заранее  в тексте документа, в  нужных местах.
Например, где нужно  вставить  две картинки. Это могут быть например на последней странице документа подпись и печать.
Это может быть скрытый текст в колонтитулах или ячейках в  таблице. 
И также возможна вставка подписи или другой картинки к нижний колонтитул на каждой странице, кроме последней.

Далее код ищет скрытые символы и собственно в эти места вставляет  нужный текст и картинки.
На форумах нашел несколько схожих задач.
Например:
   ресурс ExcelWorld.ru,  участник форума ANVG  - использовал такой код для размещения картинки в ячейку талицы
  Dim p As InlineShape
   Set p = ThisDocument.Tables(1).Rows(2).Cells(2).Range.InlineShapes.AddPicture("d:\path\name.png", False, True)


'  также вопрос обсуждался с  Галиной (shanemac51), форума cyberforum.ru  и приемы через закладки как раз с ней и обсуждали.
'  vagiinalover – другой кейс на этом же форуме.,  вставить картинку в определенное место документа

Часть кода для размещения картинки по месту найденных  скрытых символов.
    Word.ActiveDocument.Select   
    Find_text "(|"  ' подпрограмма поиска скрытых символов
   
    jp = Selection.Information(wdActiveEndPageNumber)
    j1 = Selection.Range.Start
    j1k = Selection.Range.End
    Selection.Range.Font.ColorIndex = wdRed  ' выделение найденного красным цветом
    Word.ActiveDocument.Range(j1 + 4, j1 + 4).Select
    oShape as PictureFormat
    Set oShape = ActiveDocument.Shapes.AddPicture(FileName:="D:\ФАЙЛЫ\файл1.png")
    oShape.WrapFormat.Type = wdWrapFront
    'Рисунок перед текстом.
   
    ' или по другому
        Selection.InlineShapes.AddPicture FileName:="D:\ФАЙЫ\файл1.png", _
       LinkToFile:=False, SaveWithDocument:=True
   
    ' или через  Shape
    Dim Shapes_P as  Word.Shape
    Set Shapes_P = Selection.InlineShapes.AddPicture(FileName:="D:\ФАЙЛЫ\файл1.png", _
    'LinkToFile:=False, SaveWithDocument:=True, Range:=Selection.Range).ConvertToShape
      Shapes_P.WrapFormat.Type = wdWrapBehind  ' разместить картинку перед текстом
     'Shape_P.WrapFormat.Type =wdWrapFront   ' разместить картинку за текстом











Дмитрий Щербаков(The_Prist)

Так а что не получается-то? Код вставки есть, различные варианты поиска места в документе тоже.
Зачем двигать не совсем понятно, если вставляете сами. Но даже если надо - для первого кода есть переменная p, которая отвечает за вставленную картинку, во втором - Shapes_P. Смотрите свойства Top, Left - это и есть лево право, верх и низ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

YKR

Дмитрий Щербаков(The_Prist),  согласен с вами, что есть свойства...
Получается найти закладку (скрытый текст) и вставить картинки, но по факту их нужно двигать (влено - вправо, вверх - вниз)  и даже частично накладывать друг на друга.
И это нужно подбирать опытным путем.
А двигать  не получается.  Такое впечатление, что картинка двигается на 200 единиц  не с  места установки  картинки , а отсчитывает от верхнего левого угла....
Shape_P.Left = 200     
Shape_P.Top = 100


Если позволите, я завтра пришлю упрощенный пример - файл с кодом и файлами вставки и там все видно.

Ниже код, вставки картинки к нижний колонтитул.  Все с нижним колонтитуклом получается корректно, если использовать  Selection.InlineShapes.AddPicture
(Но там используется свойство конца страницы.)

Word.ActiveDocument.Select
    Find_text "(|"
   
    jp = Selection.Information(wdActiveEndPageNumber)
    j1 = Selection.Range.Start
    j1k = Selection.Range.End
    'Selection.Range.Font.ColorIndex = wdRed
    Debug.Print jp, j1, j1k
     
    Word.ActiveDocument.Range(j1, j1 + 2).Select
   
    oShape as PictureFormat
    Set oShape = ActiveDocument.Shapes.AddPicture(FileName:="D:\ФАЙЛЫ\файл1.png")
    oShape.WrapFormat.Type = wdWrapFront
       
   
    'Selection.InlineShapes.AddPicture FileName:=" D:\ФАЙЛЫ\файл1.png"", _
    'LinkToFile:=False, SaveWithDocument:=True
   
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter '  переход к нижний колонтитул
'Selection.TypeText Text:="Тестовый текст"
Selection.TypeText Text:=""
   
Selection.InlineShapes.AddPicture FileName:=" D:\ФАЙЛЫ\файл1.png"", _      '  этим методом картинка вставляется в левый верхний угол.
LinkToFile:=False, SaveWithDocument:=True

Set Shape = Selection.InlineShapes.AddPicture(FileName:=" D:\ФАЙЛЫ\файл1.png"", _    ' этим методом картинка вставляется в  место определения скрытого текста "(|"
      LinkToFile:=False, SaveWithDocument:=True, Range:=Selection.Range).ConvertToShape
      Shape.WrapFormat.Type = wdWrapBehind
''      'Shape.Left = 200     
''      'Shape.Top = 100
       
      Shape.Left = wdShapeLeft
      Shape.Top = wdShapeBottom
      Shape.Left = ShapeLeft + 50
      Shape.Top = 785
   
      Shape.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
      Shape.RelativeVerticalPosition = wdRelativeVerticalPositionPage
   
      Shape.LockAnchor = False
      Shape.LayoutInCell = False
      Shape.WrapFormat.AllowOverlap = True
      Top_CM= Application.PointsToCentimeters(Shape.Top)
      Left_CM = Application.PointsToCentimeters(Shape.Left)
           
   ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument ' возврат с нижнего колонтитула

Яндекс.Метрика Рейтинг@Mail.ru