Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 16:10:45

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 241 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Word и VBA
| | |-+  Как можно кодом VBA найти в вордовском документе рисунки и их координаты ?
Страниц: [1]   Вниз
Печать
Автор Тема: Как можно кодом VBA найти в вордовском документе рисунки и их координаты ?  (Прочитано 4432 раз)
0 Пользователей и 1 Гость смотрят эту тему.
YKR
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« : 19.04.2022, 10:55:59 »

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

И как их можно после найденных координат программно двигать ? (влево, вправо, вверх, вниз).
Устанавливая при этом свойство, нахождения рисунка перед текстом.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #1 : 20.04.2022, 10:39:26 »

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
YKR
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #2 : 20.04.2022, 15:22:10 »

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

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

Далее код ищет скрытые символы и собственно в эти места вставляет  нужный текст и картинки.
На форумах нашел несколько схожих задач.
Например:
   ресурс ExcelWorld.ru,  участник форума ANVG  - использовал такой код для размещения картинки в ячейку талицы
 
Код: (vb)
 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 – другой кейс на этом же форуме.,  вставить картинку в определенное место документа

Часть кода для размещения картинки по месту найденных  скрытых символов.
   
Код: (vb)
 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)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #3 : 20.04.2022, 15:46:13 »

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
YKR
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #4 : 20.04.2022, 17:24:56 »

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


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

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

Код: (vb)
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 ' возврат с нижнего колонтитула
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru