На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки

1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость - сестра таланта.
3. Не забывайте использовать теги [сode=vba] ...текст программы... [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Модераторы: Old Bat, MIF
  
> проблема с ConvertTo Shape
    Задача - поместить в нужную ячейку таблицы каринку, а затем применить к ней Text Wrapping - Behind Text.

    Поскольку вставленная катринка является InlineShape, а WdWrapType.wdWrapBehind применяется только к Shape, я использовал метод ConvertToShape.

    В Word 2003 всё работало отлично, картинка становилась Shape'ом и к ней применялись нужные свойства. Проблема в том, что в Word 2007 ConvertToShape сдвигает изображение в угол страницы. :( Как сделать так, чтобы картинка осталась на месте?

    Пример кода:

    ExpandedWrap disabled
      Sub PutPic()
      Dim Picture As InlineShape
      Dim Wrap As WdWrapType
       
      ActiveDocument.Bookmarks(19).Select
      Set Picture = Selection.InlineShapes.AddPicture(FileName:="pic.jpg", LinkToFile:=False, SaveWithDocument:=True)
       
      Wrap = WdWrapType.wdWrapBehind
      Picture.ScaleHeight = 100
      Picture.ScaleWidth = 100
      Set PShape = Picture.ConvertToShape
      PShape.WrapFormat.Type = Wrap
      End Sub


    P.S. Пробовал выделять нужную ячейку, а не ссылку - тот же эффект. Картинку вставляет куда надо, после применения ConvertToShape сдвигает в верхний левый угол.

    Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape"
      ConvertToShape не должен ничего сдвигать, проблема явно в другом, документ и жпег - в студию

      Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape"
        Код следующий (продублирован внутри документа):

        ExpandedWrap disabled
          Sub PutPic()
              Dim BMSelection As Selection
              Dim Picture As InlineShape
              Dim PShape As Shape
              Dim Wrap As WdWrapType
              
              ActiveDocument.Bookmarks(1).Select
              Set Picture = Selection.InlineShapes.AddPicture(FileName:="C:\a.jpg", LinkToFile:=False, SaveWithDocument:=True)
                  
              Wrap = WdWrapType.wdWrapBehind
              Picture.ScaleHeight = 100
              Picture.ScaleWidth = 100
              Set PShape = Picture.ConvertToShape
              PShape.WrapFormat.Type = Wrap
              PShape.Select
              
              ActiveDocument.Bookmarks.Add "BM", Selection.Range
                  
          End Sub


        Во вложении картинка и .doc
        Прикреплённый файлПрикреплённый файлa.jpg (1,94 Кбайт, скачиваний: 617)
        Прикреплённый файлПрикреплённый файлDoc.docx (13,19 Кбайт, скачиваний: 201)

        Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape"
          проверил на 2007, закомментировав 7 стр.- все работает без фокусов, в пошаговом режиме проверял ?

          Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape"
            Да, действительно, обращение напрямую к типу через номер помогло:
            ExpandedWrap disabled
              PShape.WrapFormat.Type = 5

            Спасибо большое! Хотя почему не работал код с обращением по имени - WdWrapType.wdWrapBehind - для меня остаётся загадкой. В 2003 Office работает что так, что так. Спасибо ещё раз.

            Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape"
              Здравствуйте еще раз!

              Если модераторы уберут со старой темы галочку и перенесут это сообщение в нее - буду благодарен :)

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

              Пробовались различные варианты обращения к месту, куда мы вставляем картинку - клетке таблицы - через Bookmark, напрямую к ячейке.. В Cell процедура попадает верно, вставляет картинку верно, по .ConvertToShape сдвигает картинку куда-то в левый край. Или не сдвигает. В Word 2003 эффект не наблюдается.

              Самое интересное, что Shape, строго говоря, к ячейке не привязан и может быть передвинут в произвольное место страницы (например, командами .IncrementLeft 70 .IncrementTop -50 .IncrementRotation 30, как учит нас MSDN). Тем не менее, если клетку выделить и сделать Selection.Delete, то картинка удаляется вне зависимости от того, куда была перемещена, в том числе если была перемещена методом .ConvertToShape . Это очень удачно, потому что для обновления этих картинок не надо разбираться в коллекции Shapes, а достаточно сделать

              Cell.Select
              Selection.Delete

              Задача-то у меня понятная - автоматически обновлять подписи в ГОСТовском штампе документации. Штамп втиснут в колонтитул. Текст обновляется по закладкам, логотип вставляется просто картинкой, а подписи стандартно вылезают за размер собственной ячейки, и поэтому к ним применяется Обтекание:Под текстом, и подпись центруется внутри ячейки вручную. Поскольку InLineShape, которым является вставленная картинка, обтекаться не умеет, приходится делать .ConvertToShape. В принципе, если бы можно было установить Shape в заданное место на странице (скажем, заданное пискелами/сантиметрами/дюймами от верхнего левого края страницы), это позволило бы обойти проблему. Но я на эту ничего найти не смог.

              Код:

              ExpandedWrap disabled
                Dim A As Integer
                Set oTable = ActiveDocument.Sections(1).Footers(2).Range.Tables(1)
                For A=4 To 8
                   Set oCell = oTable.Cell(4, 3)
                   oCell.Select
                   Selection.Delete
                   Set Picture = oCell.Range.FormattedText.InlineShapes.AddPicture(FileName:="C:\Signature.eps", LinkToFile:=False, SaveWithDocument:=True)
                   Picture.ScaleHeight = 10
                   Picture.ScaleWidth = 10
                   msgbox "before ConvertShape"
                   Set wrp = Picture.ConvertToShape
                   msgbox "after ConvertShape"
                   wrp.WrapFormat.Type = 5
                   wrp.Select
                   wrp.IncrementTop (-7)
                   Selection.Collapse
                Next A

              Прикреплённый файлПрикреплённый файлSignature.eps (7,23 Кбайт, скачиваний: 606)
              Прикреплённый файлПрикреплённый файлdocument.docx (44,23 Кбайт, скачиваний: 212)
              Сообщение отредактировано: teem0n -
                Цитата teem0n @
                если бы можно было установить Shape в заданное место на странице

                ExpandedWrap disabled
                  ActiveDocument.Shapes.AddPicture(FileName:="C:\Signature.eps", Top:=44, Left:=55).WrapFormat.Type = wdWrapBehind
                  Кха... Называется "читайте мануалы"...

                  Спасибо огромное, так пойдет, я думаю! Удалять тогда видимо через номер Shape.

                  А почему может происходить сдвиг картинки при конвертации? Это баг в Word2007?
                    хз, не сталкивался
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0743 ]   [ 20 queries used ]   [ Generated: 21.06.25, 11:51 GMT ]