1

Тема: Вставка картинки

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

2

Re: Вставка картинки

Полезная функциональность! Мне тоже было бы интересно узнать, можно ли это сделать. Пока стандартной возможности выполнить расширение картинки на всю страницу я не нашел (даже и с помощью макроса).
Неужели такая возможность есть?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Вставка картинки

100 % процентов можно - из этой оперы

'на месте курсора вставить файл *.jpg, изменить его размеры
    With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
                                           LinkToFile:=False, SaveWithDocument:=True)
        'ширина
        .Width = 200
        'высота
        .Height = 1200
    End With

4

Re: Вставка картинки

Ципихович Эндрю пишет:

100 % процентов можно - из этой оперы

'на месте курсора вставить файл *.jpg, изменить его размеры
    With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
                                           LinkToFile:=False, SaveWithDocument:=True)
        'ширина
        .Width = 200
        'высота
        .Height = 1200
    End With


Эндрю, а нельзя ли поподробней?
Допустим, есть файл Word, в котором имеются некоторые рисунки (коллекция?)
Ширина страницы, допустим, 17,5 см.
Нужно пропорционально изменить все рисунки файла, чтобы ширина каждого рисунка была 17,5 см.
Пропорционально - то есть меняется ширина и во столько же раз должна измениться высота.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

5

Re: Вставка картинки

Ципихович Эндрю пишет:

100 % процентов можно - из этой оперы

'на месте курсора вставить файл *.jpg, изменить его размеры
    With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
                                           LinkToFile:=False, SaveWithDocument:=True)
        'ширина
        .Width = 200
        'высота
        .Height = 1200
    End With

Тут возникают несколько принципиальных вопросов!!!
1. Для чего нужно делать размер картинки по размеру страницы:
    а) для фона?
        а-1) будет ли в колонтитуле, в котором находится картинка, еще объекты и текст?
         а-1.1) если будут, то лучше воспользоваться методом вставки объектов Shapes, а не InlineShapes так как объект придется перемещать на задний план

6

Re: Вставка картинки

aap77 пишет:

Тут возникают несколько принципиальных вопросов!!!
1. Для чего нужно делать размер картинки по размеру страницы:
    а) для фона?
        а-1) будет ли в колонтитуле, в котором находится картинка, еще объекты и текст?
         а-1.1) если будут, то лучше воспользоваться методом вставки объектов Shapes, а не InlineShapes так как объект придется перемещать на задний план

Александр, не знаю, как для автора вопроса, а мне, например, нужно не для фона, а в обычном тексте.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

7

Re: Вставка картинки

В обычном тексте? На всю страницу?

8

Re: Вставка картинки

aap77 пишет:

В обычном тексте? На всю страницу?

Ну да. Например, приходится делать это, когда я преобразую текст для "читалки".

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

9

Re: Вставка картинки

Короче говоря, получается что-то такое:

Sub ShapeBrowser()
    Dim wid, hig As Double
    Dim objPaint As InlineShape
    For Each objPaint In ActiveDocument.InlineShapes
      'выделили картинку
      objPaint.Select
      'ширина и высота картинки
      'для 17 см в ширину количество пунктов примерно равно 480
      'MsgBox objPaint.Width & "  " & objPaint.Height
      If objPaint.Width <> 480 Then
          wid = 480
          hig = objPaint.Height * 480 / objPaint.Width
          'MsgBox wid & "  " & hig
          objPaint.Width = wid
          objPaint.Height = hig
      End If
    Next objPaint
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

10

Re: Вставка картинки

Коллеги, а в коллекцию InlineShape попадут только картинки? Никакие другие объекты туда не попадут?

Здесь (внешняя ссылка) пишут, что "Shape представляет объект, находящийся в слое векторной графики, например, автофигуру, OLE-объект, элемент управления на базе ActiveX или рисунок. "

Каким образом можно выделить только одни рисунки?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

11

Re: Вставка картинки

В текстах встречаются также мелкие картинки (изображения нестандартных символов, кнопок интерфейса и т.д.). Эти картинки обычно не нужно увеличивать на всю страницу. В следующем макросе мелкие картинки увеличиваются в два раза:

Sub ShapeBrowser()
    Dim wid, hig As Double
    Dim objPaint As InlineShape
    For Each objPaint In ActiveDocument.InlineShapes
      'выделили картинку
      objPaint.Select
      'ширина и высота картинки
      'для 17 см в ширину количество пунктов примерно равно 480
      'MsgBox objPaint.Width & "  " & objPaint.Height
      If objPaint.Width <> 480 Then
        If objPaint.Width > 60 Then
           'пересчет ширины и высоты картинки по ширине страницы
            wid = 480
            hig = objPaint.Height * 480 / objPaint.Width
            'MsgBox wid & "  " & hig
            objPaint.Width = wid
            objPaint.Height = hig
        Else
           'мелкая картинка – увеличение ширины и высоты картинки в два раза
            objPaint.Width = objPaint.Width * 2
            objPaint.Height = objPaint.Height * 2
            MsgBox objPaint.Width & "  " & objPaint.Height
        End If
      End If
    Next objPaint
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

12

Re: Вставка картинки

Вот функция Public Function PictureCollection собирающа картинки
И тестирующий макрос

Public Function PictureCollection() As Collection ' Функция возвращает коллекцию картинок документа
Dim PCol As Collection ' Коллекция представляющая 1 куртинку документа и ее свойства
Dim Shp As Shape, InShp As InlineShape, i As Long
    Set PictureCollection = New Collection ' Создаем новую коллекцию PictureCollection
    For Each Shp In ActiveDocument.Shapes ' Перебираем все объекты Shape
        If Shp.Type = msoLinkedPicture Or Shp.Type = msoPicture Then ' Если Shp связанная картинка или картинка, то
        'Создаем коллекцию PCol
            Set PCol = New Collection
            i = i + 1
                With PCol ' В коллекцию добавляем Элементы
                    .Add Shp, "Object" ' Добавляем объект Shape
                    .Add TypeName(Shp), "Type" ' Добавляем имя типа
                    .Add Shp.Type, "ObjType" ' Добавляем тип картинки
                End With
                    PictureCollection.Add PCol, "Picture_" & i ' Добавляем PCol в PictureCollection
        End If
    Next Shp
    
    ' Аналогично поступаем с объектами InlineShape
        For Each InShp In ActiveDocument.InlineShapes
            If InShp.Type = wdInlineShapeLinkedPicture Or InShp.Type = wdInlineShapePicture Then
            Set PCol = New Collection
            i = i + 1
                With PCol ' В коллекцию добавляем Элементы
                    .Add InShp, "Object" ' Добавляем объект InlineShape
                    .Add TypeName(InShp), "Type" ' Добавляем имя типа
                    .Add InShp.Type, "ObjType" ' Добавляем тип картинки
                End With
                    PictureCollection.Add PCol, "Picture_" & i ' Добавляем PCol в PictureCollection
            End If
        Next InShp
End Function

Public Sub TestPicture() 'Макрос по очереди выделяет картинки документа
Dim Pictures As Collection, PCol As Collection
Dim Pic As Variant
    Set Pictures = PictureCollection
        If Pictures.Count = 0 Then Exit Sub
            For i = 1 To Pictures.Count
                Set PCol = Pictures(i)
                    Set Pic = PCol("Object")
                        Pic.Select
            Next i
End Sub

13

Re: Вставка картинки

Интересно также, что по умолчанию VBA изменяет картинку пропорционально (если изменяется ширина, то автоматически изменяется и высота). То есть, в общем случае, достаточно изменить, например, ширину, и пропорционально изменится высота.

Для отмены пропорциональности изменения можно изменить свойство LockAspectRatio:

objPaint.LockAspectRatio = msoFalse
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

14

Re: Вставка картинки

В следующей программе крупные картинки растягиваются на всю страницу непропорционально:

Sub ShapeBrowserUnprop()
    Dim wid, hig As Double
    Dim objPaint As InlineShape
    For Each objPaint In ActiveDocument.InlineShapes
      'выделили картинку
      objPaint.Select
      'ширина и высота картинки
      'для 17 см в ширину количество пунктов примерно равно 480
      'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725
      'для увеличенной высоты страницы 28 см количество пунктов примерно равно 780
      'MsgBox objPaint.Width & "  " & objPaint.Height
      If objPaint.Width <> 480 Or objPaint.Height <> 780 Then
        If objPaint.Width > 60 Then
            'непропорциональный пересчет ширины и высоты картинки для страницы 480х780
            objPaint.LockAspectRatio = msoFalse
            objPaint.Width = 480
            objPaint.Height = 780
        Else
           'мелкая картинка – увеличение ширины и высоты картинки в два раза
            objPaint.Width = objPaint.Width * 2
            objPaint.Height = objPaint.Height * 2
            MsgBox objPaint.Width & "  " & objPaint.Height
        End If
      End If
    Next objPaint
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

15

Re: Вставка картинки

Marvin, вы удовлетворены полученными результатами?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

16

Re: Вставка картинки

Доброго времени суток.
при работе в Ворде 2010 возникла проблемка. Файлы формата jpg меняют свое масштабирование при вставке в документ. Файлы с размером 600х600 пикс.
остаются в оригинальном размере, а все остальные уменьшаются. При увеличении масштаба теряется качество рисунка.
Подскажите, пожалуйста, как вставить рисунок без изменения масштаба, если это возможно.
Заранее спасибо)

17

Re: Вставка картинки

Рыж пишет:

Доброго времени суток.
при работе в Ворде 2010 возникла проблемка. Файлы формата jpg меняют свое масштабирование при вставке в документ. Файлы с размером 600х600 пикс.
остаются в оригинальном размере, а все остальные уменьшаются. При увеличении масштаба теряется качество рисунка.
Подскажите, пожалуйста, как вставить рисунок без изменения масштаба, если это возможно.
Заранее спасибо)

Боюсь, что это "фича". Если рисунок шире текстового поля, то Word автоматически  уменьшает его пропорционально до ширины текстового поля.
Степень уменьшения вы можете увидеть в окне Разметка: выделить рисунок - Работа с рисунками - группа Размер - кнопка вызова диалогового окна - область Масштаб.
К сожалению, как добиться вставки рисунка "в оригинальном размере" стандартными средствами, я пока не знаю.
В принципе, можно изменить масштаб рисунка в упомянутом окне или предложить макрос для изменения масштаба конкретного рисунка или всех рисунков документа, но я не уверен, что вас удовлетворит такое решение.
Буду рад услышать иные мнения экспертов.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

18

Re: Вставка картинки

'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725

А разве нельзя получить точное значение ширины для конкретной страницы?

19

Re: Вставка картинки

melancholic пишет:

'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725

А разве нельзя получить точное значение ширины для конкретной страницы?

Можно

With ActiveDocument.PageSetup
    Debug.Print (.PageWidth & " x " & .PageHeight)
End With

Данный код для листа формата А4 (210мм*297мм) дает 595,3 x 841,9